2013-01-14 209 views

回答

3

Visual Studio中的服務引用只不過是一個代碼生成器,它創建一個具有調用Web服務所需的相應數據元素的代理類。當然,如果你真的想去完成乏味和無聊的工作,你可以親手構建一個代理。

也許首先使用.net反射器反編譯System.ServiceModel.ClientBase?

請在的ChannelFactory一些研究:http://msdn.microsoft.com/en-us/library/system.servicemodel.channelfactory.aspx

即使通過包裝一個的ChannelFactory實現我自己的客戶端時,我仍在使用在另一個項目中添加服務引用創建類定義,並將其移動到真實的項目。這是一個很好的妥協。

這裏有一個簡單的異步服務接口:

[ServiceContract(Name = "IService")] 
public interface IServiceAsync 
{ 
    [OperationContract(AsyncPattern = true)] 
    IAsyncResult BeginGetStuff(string someData, AsyncCallback callback, object state); 

    IEnumerable<Stuff> EndGetStuff(IAsyncResult result); 
} 

的.NET合同可能是這樣的:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    IEnumerable<Stuff> GetStuff(string someData); 
} 

然後在代碼中,假設你使用HTTP,沒有安全和二進制消息編碼,像這樣(對不起,我沒有編譯任何這個,只是使用我爲項目編寫的一些代碼鍵入它):