我希望你们能帮助我。
我是使用C#代码的.Net开发人员。我的任务是调用我的同事用Java编写的Web服务。我们遇到的第一个问题是他不会说.Net而且我不会说Java。
第一个问题是使用Web引用还是服务引用。两者似乎都工作在我的程序可以找到服务并添加引用的意义上。但是我的项目中没有公开服务参考。出于这个原因,我至少暂时使用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>
先谢谢,这个论坛很棒。
答案 0 :(得分:1)
我看到的一个问题是WSDL让事情变得有些混乱。它将XML数据对象元素名称和Web服务操作定义为“getContactUs”。我将讨论将XML数据元素从“getContactUs”更改为类似于“ContactInfo”的内容。如果此元素发生变化,您很可能会发现您对此命名的困惑。
通常,您需要执行一些操作才能执行Web服务。第一种是检索服务的WebReference代理实例。第二种是根据需要初始化任何输入参数。最后,您将使用代理类来调用服务方法。我相信您已执行了第二步,但您错过了第一步,它将允许您访问Web服务调用。根据您的代码,服务调用可能看起来类似于以下内容:
WebReference.ContactUs myService = new WebReference.ContactUs();
...
<result data type> _Response = myService.getContactUs(myContactUs);
...
答案 1 :(得分:0)
当您调用 new WebReference.getContactUs(); 时,似乎正在调用服务方法。如果您检查运行java服务的机器的Web服务器日志,您可以验证这一点,但是肥皂“函数”是由该wsdl中的元素定义的。
答案 2 :(得分:0)
最重要的一点是为您需要调用的代码提供正确的WSDL。这似乎是有序的。
我建议您从Storm(http://storm.codeplex.com/)开始,以确保WSDL正确并对Web服务进行初始测试。然后我被告知Visual Studio可以导入WSDL并生成您可以调用的客户端代码,我接下来会这样做。
答案 3 :(得分:0)
我也遇到过这个问题。它是由.NET的DateTime
类型与Java定义的Web服务不同引起的。只需使用字符串将DateTime
替换为确认的日期时间格式。