我正在編寫一個REST風格的Web服務,並且在自身基本步驟方面遇到很大麻煩。ReSTful Web服務發送和接收soap + xml
我可以做如下:
可以創建RESTful Web服務發送和接收XML(不能用肥皂+ XML)返回給客戶端與
webHttpBinding
可以創建RESTful Web服務和發送和接收使用所述合同肥皂+ xml的定義如下:
[OperationContract] [WebInvoke(Method = "POST", UriTemplate = "", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)] XmlElement PostRequestXML(Stream xmlData);
點(2)是發送和接收soap + xml數據的正確方法嗎?
我在網上做了很多搜索,但找不到更好的鏈接,它解釋了創建Web服務以發送和接收soap + xml的詳細步驟。
我想知道:
什麼是更好的方式來設計我的RESTful網絡服務來發送和接收SOAP + XML?你能告訴我操作合同的定義嗎?
需要使用哪種綁定?如果有任何例子,請聯繫。
- 你能告訴我關於編寫
OperationContract
和配置web.config的詳細信息嗎?
- 你能告訴我關於編寫
請求和響應謹如下。
請求:
Header:
POST /EnrollmentServer/Discovery.svc HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
User-Agent: Windows Phone 8 Enrollment Client
Host: EnterpriseEnrollment.Contoso.com
Content-Length: xxx
Cache-Control: no-cache
<?xml version="1.0"?>
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover
</a:Action>
<a:MessageID>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">
https://ENROLLTEST.CONTOSO.COM/EnrollmentServer/Discovery.svc
</a:To>
</s:Header>
<s:Body>
<Discover xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment/">
<request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EmailAddress>[email protected]</EmailAddress>
<RequestVersion>1.0</RequestVersion>
</request>
</Discover>
</s:Body>
</s:Envelope>
迴應:
頁眉:
HTTP/1.1 200 OK
Content-Length: 865
Content-Type: application/soap+xml; charset=utf-8
Server: EnterpriseEnrollment.Contoso.com
Date: Tue, 02 Aug 2012 00:32:56 GMT
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/DiscoverResponse
</a:Action>
<ActivityId>
d9eb2fdd-e38a-46ee-bd93-aea9dc86a3b8
</ActivityId>
<a:RelatesTo>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:RelatesTo>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">>
<DiscoverResponse
xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment">
<DiscoverResult>
<AuthPolicy>OnPremise</AuthPolicy>
<AuthUrl/>
<EnrollmentPolicyServiceUrl>
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
</EnrollmentPolicyServiceUrl>
<EnrollmentServiceUrl>
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
</EnrollmentServiceUrl>
<FederatedServiceName/>
<FederatedServicePolicy/>
</DiscoverResult>
</DiscoverResponse>
</s:Body>
</s:Envelope>
我現在不能舉一個例子(沒時間),但是你可以使用選項2併爲你的服務公開端點 - 例如WebHttpBinding(用於REST)和BasicHttpBinding(用於SOAP)。谷歌應該提供大量關於如何做到這一點的例子。 – Tim
創建兩個不同的點需要使用兩個不同的地址,但協議對GET和POST使用相同的URI。我如何使用兩個不同端點的相同URI? –
有趣的是在你的#2你沒有指定一個模板Uri所以它怎麼可能是RESTful! :)整個休息點是公開Uri模板,這意味着在這裏你需要放置一些東西,所以我甚至不知道這是如何接近於RESTful。我在WCF看到很多人認爲他們正在創造一些RESTful但他們甚至沒有指定Uri,這是沒有意義的 – PositiveGuy