我正在寫一個WCF服務,將由專有的WebService(asmx)調用。我只能訪問一個非常簡短的文檔和用於驗證WCF服務功能的測試工具。測試工具失敗:對象引用未設置爲對象的實例。WebService客戶端錯誤調用WCF與類作爲輸入參數
有一個方法,爲getBalance,供應一類作爲輸入參數WCF:
class ClientRequest
{
int ClientID,
string Currency,
datetime AsOfDate
}
,並希望返回:
class ClientResponse
{
int ClientID,
decimal Balance
}
這就是我對文檔的查看。
簡單數據類型的其他方法工作得很好。
經過一番研究,我的問題範圍縮小到簡單和複雜的輸入數據類型之間的SOAP XML的區別:
簡單(片段):
<soap:Envelope xmlns:soap="h t t p ://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="h t t p :// www.w3.org/2001/XMLSchema-instance" xmlns:xsd="h t t p ://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetUserDetails xmlns="h t t p ://t e m p u r i . o r g/">
<UserID>12345</UserID>
... ..
複合物(摘錄) :
<soap:Envelope xmlns:soap="h t t p ://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="h t t p : //www.w3.org/2001/XMLSchema-instance" xmlns:xsd="h t t p ://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetBalance xmlns="h t t p ://tempuri.org/">
**<request>**
<ClientID>645</ClientID>
......
在我的WCF代碼:
[ServiceContract (Namespace="h t t p : //tempuri.org/")]
public interface IClientAPI
{
[OperationContract(Action = " h t t p : //tempuri.org/GetBalance", ReplyAction = "h t t p ://tempuri.org/GetBalance")]
ClientResponse GetBalance(ClientRequest clientrequest);
}
[DataContract(Namespace = "h t t p ://tempuri.org/"), Serializable]
public class ClientRequest
{
[DataMember]
public int ClientID { get; set; }
[DataMember]
public string Currency { get; set; }
[DataMember]
public datetime AsOfDate { get; set; }
}
............... ..
[DataContract(Namespace = "http://t e m p u r i . o r g/")]
public class ClientResponse
{
[DataMember]
public int ClientID { get; set; }
[DataMember]
public decimal Balance { get; set; }
public static ClientResponse GetBalance(ClientRequest clientrequest)
{
//DO STUFF
return response;
}
}
服務:
public ClientResponse GetBalance(ClientRequest clientrequest)
{
ClientResponse r = new ClientResponse();
int i = ClientResponse.GetBalance(clientrequest);
//DO STUFF
return r;
}
輸入的ClientRequest這裏始終是NULL。
顯然它與SOAP輸入中的標記有關。
任何進一步的線索,想法,文章將非常讚賞。 GetBalance方法中的錯誤是:未將對象引用設置爲對象的實例。 ClientRequest爲空。
非常感謝。
埃德
另外我需要添加[數據成員(訂單= 2)],以匹配在SOAP元素的順序。 – KSNSACC