2013-03-14 120 views
4

我使用ServiceStack創建了我的客戶端/服務器應用程序相互通信,並且運行良好,但我還需要訪問外部SOAP Web服務。使用ServiceStack訪問SOAP webservice

我試圖使用Soap12ServiceClient來訪問它,但我找不到任何示例,然後我去了實際工作的添加服務引用WCF方式,但創建了大量的代碼。

是否可以使用Soap12ServiceClient以同樣簡單的方式使用JsonServiceClient來發送消息/請求並接收消息/響應?如果是這樣,你能幫忙或指點我一個樣本嗎?

+0

舊的問題,但我有興趣做同樣的事情 - 使用ServiceStack的SOAP客戶端調用外部SOAP端點,而不必使用Visual Studio的臃腫,生成的代理。經過一些試驗和錯誤之後,我注意到ServiceStack的Soap11ServiceClient和Soap12ServiceClient具有硬編碼的「/ Soap11」和「/ Soap12」端點。所以,不幸的是,這是不可能的。 – PatrickSteele 2015-05-22 18:44:43

回答

1

我不確定你卡在哪裏,因爲所有的ServiceStack's C# Service Clients實現相同的IServiceClient,所以他們可以用同樣的方式。這裏是所有的例子ServiceStack內置的C#服務客戶端calling the same Hello World service

[TestFixture] 
public class HelloWorldServiceClientTests 
{ 
    public static IEnumerable ServiceClients 
    { 
     get 
     { 
      return new IServiceClient[] { 
       new JsonServiceClient(Config.ServiceStackBaseUri), 
       new JsvServiceClient(Config.ServiceStackBaseUri), 
       new XmlServiceClient(Config.ServiceStackBaseUri), 
       new Soap11ServiceClient(Config.ServiceStackBaseUri), 
       new Soap12ServiceClient(Config.ServiceStackBaseUri) 
      }; 
     } 
    } 

    [Test, TestCaseSource("ServiceClients")] 
    public void HelloWorld_with_Sync_ServiceClients(IServiceClient client) 
    { 
     var response = client.Send<HelloResponse>(new Hello { Name = "World!" }); 

     Assert.That(response.Result, Is.EqualTo("Hello, World!")); 
    } 
} 

雖然SOAP的工作原理類似於任何其他C#的客戶端,這是聯合國共同以這種方式來使用它,因爲如果你能使用通用的C#SOAP服務客戶端,您也可以使用任何其他服務客戶端,這些服務客戶端比SOAP更快速,更具彈性且更具可版本化 - 除了其能力之外,其他格式實際上沒有兌換質量生成客戶代理,你說你不想做任何事情。

如果您不確定您應該使用哪種端點或格式I recommend reading my Interview on InfoQ,其中討論了SOAP的缺點以及使用其他格式的好處。

+1

對不起,但我想你誤解了我的問題(或者我寫得很糟糕)。我正在寫我的客戶端和我的服務器,並在兩端使用ServiceStack,使用JsonServiceClient訪問數據,並且完美地工作。 但我的服務器(從數據庫檢索數據)還必須從另一個Web服務檢索數據,而不是我的服務器,而不是ServiceStack,我不能在另一臺服務器上修改SOAP數據。 所以我的問題是:我可以使用Soap12ServiceClient訪問該服務器? – 2013-03-14 23:50:43

+0

或更好:在兩端使用ServiceStack我可以用兩行代碼獲得我的數據...如果我只使用客戶端(因爲我沒有控制SOAP服務器),我可以以比使用更清潔的方式「添加服務參考」? – 2013-03-15 00:00:21

+0

如果您要調用外部SOAP服務,則與ServiceStack無關,因此您無法使用ServiceStack的通用服務客戶端。所以你應該做任何外部服務提供商的建議。 – mythz 2013-03-15 00:24:52