我目前正在嘗試創建一個調用WCF SOAP服務的REST代理,我試圖讓一個通道發送消息通過。我知道我需要使用ChannelFactory,但我沒有該服務的接口。有沒有我可以傳遞的默認值?是否有另一種打包郵件的方式?ChannelFactory <T> without interface
當我說消息時,我的意思是來自ServiceModels.Channels.Message。
我很新,所以任何幫助,將不勝感激。
我目前正在嘗試創建一個調用WCF SOAP服務的REST代理,我試圖讓一個通道發送消息通過。我知道我需要使用ChannelFactory,但我沒有該服務的接口。有沒有我可以傳遞的默認值?是否有另一種打包郵件的方式?ChannelFactory <T> without interface
當我說消息時,我的意思是來自ServiceModels.Channels.Message。
我很新,所以任何幫助,將不勝感激。
您可以generate a WCF client從以下兩種方式之一WSDL服務合同:
無論哪種方式會產生.NET類與服務協定公開的類型相對應,以及可用於調用服務操作的WCF client proxy class:
try
{
var client = new MyServiceClient();
client.DoSomething();
client.Close();
}
catch
{
if (client != null)
{
client.Abort();
}
}
如果你喜歡使用較低級別ChannelFactory API,你應該使用產生IClientChannel接口來代替:
try
{
var factory = new ChannelFactory<MyServiceChannel>();
var client = factory.CreateChannel();
client.DoSomething();
client.Close();
}
catch
{
if (client != null)
{
client.Abort();
}
}
謝謝,我最終從服務器訪問了源代碼,只是複製了我需要的接口,但是如果我只有wsdl,我也會接受這一點,但這也能解決問題。謝謝。 – SmashCode 2012-02-20 20:56:00
@SmashCode我明白了。我想你在你的一個評論中說過你確實有WSDL合約。無論如何,我很高興我可以幫助:) – 2012-02-20 21:02:13
我很奇怪地說了一句那個評論,Enrico。我確實擁有WSDL,但是現在我擁有WSDL和源代碼,所以我只使用源代替WSDL,但如果我只有WSDL而不是源代碼,那麼您的答案就可以工作。 – SmashCode 2012-02-20 21:10:39
ChannelFactory.CreateChannel
創建實現所提供的接口的對象並且IClientChannel
。該界面必須與服務匹配。
您不需要與服務使用相同的DLL。您可以創建自己的界面以匹配服務的定義。在ServiceContract
屬性中,設置名稱和名稱空間以匹配服務的名稱和名稱空間。
有沒有什麼辦法可以從wsdl自動生成這個? – SmashCode 2012-02-20 19:47:21
@SmashCode是的,使用Visual Studio中的** Add Service Reference **對話框或** svcutil **命令行實用程序。 – 2012-02-20 20:26:39
您的Web服務不能既是[基於REST *和*使用SOAP] (http://geeknizer.com/rest-vs-soap-using-http-choosing-the-right-webservice-protocol)。哪一個? – 2012-02-20 19:33:34
這就是爲什麼它的代理,它需要一個休息的呼叫,從其餘的調用中拉出一個參數,將它打包爲肥皂信息,將它發送到肥皂服務,得到響應,解析它,並通過其餘的服務 – SmashCode 2012-02-20 19:42:07
我明白了。我誤解了* proxy *這個詞,我以爲你的意思是客戶端代理:)是否缺少SOAP服務的接口? – 2012-02-20 19:45:26