0
我想使用Python的request包來查詢WCF Web服務。如何使用Python的請求將複雜類型發佈到WCF?
我在WCF中創建了一個非常簡單的Web服務,下面的默認模板VS:
[ServiceContract]
public interface IHWService
{
[OperationContract]
[WebInvoke(Method="GET", UriTemplate="SayHello", ResponseFormat=WebMessageFormat.Json)]
string SayHello();
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetData", ResponseFormat = WebMessageFormat.Json)]
string GetData(int value);
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetData2", BodyStyle=WebMessageBodyStyle.Bare, RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
}
從Python中,我設法打電話前兩個和背部容易獲得數據。
但是,我試圖稱呼第三個,它增加了複雜類型的概念。
這是我的Python代碼:
import requests as req
import json
wsAddr="http://localhost:58356/HWService.svc"
methodPath="/GetData2"
cType={'BoolValue':"true", 'StringValue':'Hello world'}
headers = {'content-type': 'application/json'}
result=req.post(wsAddr+methodPath,params=json.dumps({'composite':json.dumps(cType)}),headers=headers)
但它不工作,即,如果我把細目VS在GetDataUsingDataContract
方法,我看到composite
說法是null
。我認爲這是來自解析中的一個問題,但我不太明白什麼是錯的。
您是否看到明顯的錯誤?
你知道我如何在解析機制內進行調試嗎?
編輯:
下面是複雜類型定義:
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
實際上,現在類型不再爲null,但兩個字段都沒有初始化。我將自定義類型定義添加到問題 – SRKX
@SRKX:我不知道JSON如何映射到WCF類型。 –
找到了!只需在WebInvoke屬性中設置'BodyStyle = WebMessageBodyStyle.WrappedRequest'(而不是Bare)即可。非常感謝。 – SRKX