我的老板问到构建一个客户端来访问将发送和接收一些基本数据和嵌入式文档的Web服务需要花费多长时间。刚开始玩它,看看其中包含什么。我从事Web和桌面开发已有20年了,但实际上我从未接触过Web服务,因此我处于极端的水平。
到目前为止,我使用wsdl来创建ServiceReference1,我可以在intellisense中看到这些方法,但是我不知道从哪里开始调用这些方法,传递参数并使用响应。我觉得自己很愚蠢,因为我敢肯定这很简单,但是仅仅弄乱代码并寻找关键点示例就无济于事。通常,我可以在几分钟之内通过google找到某些内容,但恰到好处,但是这里没有运气。希望朝正确的方向前进。
所以是基本问题。拨打电话的正确方法。如何以及在何处着陆返回的数据。如何添加参数。
这是我的第一次尝试。这将得到一个简单列表,并且没有参数。提琴手的结果返回了数据,但是有一个运行时类型不匹配错误,我认为这是由一些导致响应的杂散字符引起的,这些错误似乎是由于卡盘而引起的,无论如何。每次以1ffs开始,然后包含xml的其余部分。其次,我需要将列表放入数据集或其他容器中,但我希望能够进入代码并查看结果
ServiceReference1.FilingInfoClient webservice = new FilingInfoClient();
ServiceReference1.courtListRequest cr = new ServiceReference1.courtListRequest();
ServiceReference1.courtListResponse lr = new ServiceReference1.courtListResponse();
lr = webservice .getCourtList(cr);
这基本上是相同的,但需要日期参数。当我运行此提琴手时,表明该参数未发送。没有其他错误,但我确定只是因为它立即爆炸。
ServiceReference1.FilingInfoClient webservice = new FilingInfoClient();
ServiceReference1.messageListRequest mr = new ServiceReference1.messageListRequest();
ServiceReference1.MessageListResponse mlr = new ServiceReference1.MessageListResponse();
mr.latestMessagePullTimestamp = DateTime.Now.AddDays(-5);
mr.endTimestamp = DateTime.Now;
mlr.latestMessagePullTimestamp = DateTime.Now;
mlr = webservice.getMessageList(mr);
这是Web服务主机提供的信息
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn1="urn:green:partner:ws:schema:FilingInfo">
<x:Header/>
<x:Body>
<urn1:getcourtList>
<urn1:courtListRequest/>
</urn1:getcourtList>
</x:Body>
</x:Envelope>
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn1="urn:green:partner:ws:schema:FilingInfo">
<x:Header/>
<x:Body>
<urn1:getMessageList>
<urn1:messageListRequest>
<urn1:latestMessagePullTimestamp>?</urn1:latestMessagePullTimestamp>
</urn1:messageListRequest>
</urn1:getMessageList>
</x:Body>
</x:Envelope>
我们已经在Web服务中为每个操作获得了请求和响应对。认为像请求=>输入,响应=>输出,操作=>方法。
该Web服务是一个API。消耗API的是客户端。 WSDL描述了API的操作及其请求和响应。像Visual Studio这样的工具知道如何读取WSDL并构建C#代码以在后台执行这些(SOAP)操作。这是客户端(此处为FilingInfoClient
)。 Visual Studio还将生成代表每个请求和响应的类。
这可提供熟悉的编程经验。您调用一个方法,给它一些输入,然后它返回一些输出。
using (var client = new FilingInfoClient())
{
var request = new courtListRequest
{
//TODO fill in relevant properties
};
var response = client.getCourtList(request);
}