2013-03-14 5 views
4

Я создаю соединение между клиентом и сервером с ServiceStack и отлично работает, но мне также нужно получить доступ к внешнему веб-сервису SOAP.Доступ к веб-сервису SOAP с ServiceStack

Я попытался использовать Soap12ServiceClient для доступа к нему, но я не смог найти ни одного примера, а затем я отправил ссылку на службу WCF, которая фактически работала, но создала тонну кода.

Можно ли использовать Soap12ServiceClient таким же простым способом Я использую JsonServiceClient для отправки сообщения/запроса и получения сообщения/ответа? Если да, можете ли вы мне помочь или указать на образец?

+0

Старый вопрос, но мне было интересно сделать то же самое - использовать SOAP-клиент ServiceStack для вызова внешней конечной точки SOAP вместо того, чтобы использовать раздутые, созданные прокси-серверы Visual Studio. После небольшого проб и ошибок я заметил, что Soap11ServiceClient ServiceStack и Soap12ServiceClient имеют жестко закодированные конечные точки «/ Soap11» и «/ Soap12». Так, к сожалению, это невозможно. – PatrickSteele

ответ

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, это не-общее, чтобы использовать его таким образом, потому что, если вы в состоянии используйте общий клиент службы SOAP SOAP, который, вероятно, также может использовать любой из других клиентов службы, которые все быстрее, более устойчивы и более доступны для версий, чем SOAP, - который не имеет эффективного качества для других форматов, кроме своих возможностей генерировать клиентские прокси, которые, как вы сказали, вы не хотите делать.

Если вы не определились с какой конечной точкой или форматом вы должны использовать I recommend reading my Interview on InfoQ, в котором обсуждаются недостатки SOAP и преимущества использования других форматов.

+1

Извините, но я думаю, вы неправильно поняли мои вопросы (или, может быть, я написал это плохо). Я пишу свой клиент и свой сервер и используя ServiceStack с обоих концов, получая доступ к данным с помощью JsonServiceClient, и это отлично работает. Но мой сервер (который извлекает данные из db) также должен извлекать данные из другой веб-службы, а не моей, а не из ServiceStack, что я не могу изменить, SOAP-один на другом сервере. Итак, мой вопрос: могу ли я использовать Soap12ServiceClient для доступа к этому серверу? –

+0

Или лучше: используя ServiceStack с обоих концов, я могу получить свои данные с двумя строками кода ... если я использую только клиент (потому что я не контролирую SOAP-сервер), могу ли я сделать это более чистым способом, чем использовать «Добавить ссылку на службу»? –

+0

Если вы вызываете внешнюю службу SOAP, это не имеет ничего общего с ServiceStack, поэтому вы не можете использовать сервисные клиенты ServiceStack. Поэтому вы должны просто делать то, что предлагает внешний поставщик услуг. – mythz

Смежные вопросы