【问题标题】:Calling a Java Web Service from a .Net Project从 .Net 项目调用 Java Web 服务
【发布时间】:2011-03-21 21:18:06
【问题描述】:

我希望你们能帮助我。

我是一名使用 C# 代码的 .Net 开发人员。我的同事给我的任务是调用一个用 Java 编写的 Web 服务。我们遇到的第一个问题是他不会说 .Net,而我不会说 Java。

第一个问题是使用网络引用还是服务引用。在我的程序可以找到服务并添加引用的意义上,两者似乎都有效。但是服务参考没有在我的项目中公开。出于这个原因,我至少现在使用了 Web 参考。

我可以设置任何属性并调用它们,它工作正常。我的问题是如何调用该方法。当我问我的同事时,他似乎不明白我在说什么。

如果问题很简单,或者如果我需要以 Java 人员能够理解我在说什么的方式向我的同事提问,我需要答案。

这是我写的代码:

WebReference.getContactUs myContactUs = new WebReference.getContactUs();

        myContactUs.ContactUsReceived = DateTime.Now;
        myContactUs.FirstName = "Bob";
        myContactUs.LastName = "Avallone";
        DateTime _ThisDateTime = myContactUs.ContactUsReceived;

这是来自wsdl的代码

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://contactus.nrcme.fmcsa.dot.gov/" xmlns:ns1="http://nrcme.fmcsa.dot.gov/ContactUs/" name="ContactUs" targetNamespace="http://nrcme.fmcsa.dot.gov/ContactUs/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <xs:schema targetNamespace="http://nrcme.fmcsa.dot.gov/ContactUs/" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="getContactUs">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ContactUsReceived" type="xs:dateTime" />
            <xs:element name="FirstName" type="xs:string" />
            <xs:element name="LastName" type="xs:string" />
            <xs:element name="Title" type="xs:string" />
            <xs:element name="Organization" type="xs:string" />
            <xs:element name="Address1" type="xs:string" />
            <xs:element name="Address2" type="xs:string" />
            <xs:element name="City" type="xs:string" />
            <xs:element name="State" type="xs:string" />
            <xs:element name="ZipCode" type="xs:string" />
            <xs:element name="Telephone" type="xs:string" />
            <xs:element minOccurs="0" name="Fax" type="xs:string" />
            <xs:element name="Email" type="xs:string" />
            <xs:element name="EmailConfirm" type="xs:string" />
            <xs:element minOccurs="0" name="Comment" type="xs:string" />
            <xs:element minOccurs="0" name="Question1" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="getContactUsResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ContactUsReceived" type="xs:dateTime" />
            <xs:element minOccurs="0" name="status" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </types>
  <message name="ContactUs_getContactUsResponse">
    <part name="getContactUsResponse" element="ns1:getContactUsResponse" />
  </message>
  <message name="ContactUs_getContactUs">
    <part name="getContactUs" element="ns1:getContactUs" />
  </message>
  <portType name="ContactUs">
    <operation name="getContactUs" parameterOrder="getContactUs">
      <input message="ns1:ContactUs_getContactUs" />
      <output message="ns1:ContactUs_getContactUsResponse" />
    </operation>
  </portType>
  <binding name="ContactUsBinding" type="ns1:ContactUs">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
    <operation name="getContactUs">
      <soap:operation soapAction="http://nrcme.fmcsa.dot.gov/ContactUs/getContactUs" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
</definitions>

提前感谢,这个论坛很棒。

【问题讨论】:

  • 在处理Java和.Net等两个不同平台时,需要让通信尽可能的清晰。您对 Java 开发人员的基本问题归结为我如何使用 .Net 调用 WebService。这不是 Java 开发人员能够为您提供的。 Java 开发人员可以提供有关 Web 服务本身的详细信息(XML、输入、输出等),但是,要使用的库的详细信息等超出了服务提供者(Java 开发人员)的范围,很可能超出了他们的专业知识.

标签: c# java .net web-services


【解决方案1】:

我看到的一个问题是 WSDL 让事情变得有点混乱。它将 XML 数据对象元素名称和 Web 服务操作定义为“getContactUs”。我将讨论将 XML 数据元素从“getContactUs”更改为类似于“ContactInfo”的内容。如果此元素发生更改,您很可能会发现您的困惑在于此命名。

通常,您需要执行一些操作来执行 Web 服务。第一个是检索服务的 WebReference 代理实例。第二个是根据需要初始化任何输入参数。最后,您将使用代理类来调用服务方法。我相信您已经执行了第二步,但是您错过了可以访问 Web 服务调用的第一步。根据您的代码,服务调用可能类似于以下内容:

WebReference.ContactUs myService = new WebReference.ContactUs();
...
<result data type> _Response = myService.getContactUs(myContactUs);
...

【讨论】:

  • 克里斯,这就是我需要的。谢谢,我欠你的。鲍勃
【解决方案2】:

您调用new WebReference.getContactUs();时似乎调用的是服务方法。如果您检查运行 java 服务的机器的 Web 服务器日志,您可以验证这一点,但是肥皂“功能”是由该 wsdl 中的元素定义的。

【讨论】:

    【解决方案3】:

    最重要的一点是为您需要调用的代码拥有正确的 WSDL。这似乎是有序的。

    我建议您从 Storm (http://storm.codeplex.com/) 开始,以确保 WSDL 正确并进行 Web 服务的初始测试。然后有人告诉我,Visual Studio 可以导入 WSDL 并生成客户端代码,然后你就可以调用了,我接下来会这样做。

    【讨论】:

      【解决方案4】:

      我也遇到过这个问题。这是由 .NET 的 DateTime 类型与 Java 定义的 Web 服务不同引起的。只需使用字符串将DateTime 替换为确认的日期时间格式即可。

      【讨论】:

        猜你喜欢
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多