繁体   English   中英

从.Net项目中调用Java Web服务

[英]Calling a Java Web Service from a .Net Project

我希望你们能帮助我。

我是使用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>

预先感谢,这个论坛很棒。

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

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

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

似乎在调用新的WebReference.getContactUs()时正在调用服务方法 如果检查运行Java服务的计算机的Web服务器日志,则可以验证这一点。但是,“功能”由该wsdl中的元素定义。

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

我建议您从Storm(http://storm.codeplex.com/)开始,以确保WSDL正确并对Web服务进行初始测试。 然后,我被告知Visual Studio可以导入W​​SDL并生成您可以随后调用的客户端代码,接下来我将做这件事。

我也有这个问题。 这是由于.NET的DateTime类型与Java定义的Web服务不同。 只需使用字符串将DateTime替换为已确认的datetime格式即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM