Воссоздать веб-сервис - PullRequest
       10

Воссоздать веб-сервис

1 голос
/ 05 января 2010

HI

Моя работа заключалась в том, чтобы создать веб-сервис, который действовал бы как другой веб-сервис, который у нас есть, поэтому клиент не замечает разницы. Я создал весь свой веб-сервис, и он отлично работает, так как я использую его, и результаты все одинаковы. Дело в том, что я создал клиентское приложение, в котором я использую старый веб-сервис, и если я изменяю URL-адрес веб-ссылки на новый сервис и повторяю, я получаю ошибку:

System.Web.Services.Protocols.SoapException: Сервер не распознал HTTP-заголовок SOAPAction

Если я посмотрю на различия в Reference.cs в двух моих веб-сервисах, то обнаружу, что есть небольшая разница в атрибутах, что, я думаю, является проблемой.

Новый сервис:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="SprWebServiceSoap", Namespace="http://ws.hl7.trispark.com/")]
    public partial class SprWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {

Старый сервис:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="SprWebServiceRemoteBinding", Namespace="http://ws.hl7.trispark.com/")]
    public partial class SprWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {

А также метод, который используется:

Новое:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://ws.hl7.trispark.com/invoke", RequestNamespace="http://ws.hl7.trispark.com/", ResponseNamespace="http://ws.hl7.trispark.com/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        public invokeResponse invoke(invoke inv) {

Старый:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
        [return: System.Xml.Serialization.XmlElementAttribute("invokeResponse", Namespace="http://ws.hl7.trispark.com/types")]
        public invokeResponse invoke([System.Xml.Serialization.XmlElementAttribute("invoke", Namespace="http://ws.hl7.trispark.com/types")] invoke invoke1) {

Сначала я подумал, что проблема может заключаться в том, что моя версия была создана в vs2008, а старая - в vs2005, поэтому я пересоздал ее в 2005 году, но это ничего не изменило.

Дело в том, что у меня нет кода старого, поэтому я не вижу, какие конкретные атрибуты используются.

Кто-нибудь знает, какие атрибуты я должен установить, чтобы получить то же самое?

Большое спасибо!

Ответы [ 4 ]

1 голос
/ 05 января 2010

У вас есть DLL старого сервиса? Если у вас есть DLL, вы можете использовать Reflector для ее обратного инжиниринга, если это сервис .net.

0 голосов
/ 22 июня 2011

Я понимаю, что это старый вопрос, но если ваша цель - создать веб-сервер, который будет работать точно так же, как старый, вы должны создать новый из WSDL старого. Вы можете сделать это автоматически с Visual Studio:

http://bloggingabout.net/blogs/jschreuder/archive/2005/05/19/4124.aspx

0 голосов
/ 05 января 2010

Попробуйте сравнить WSDL обеих служб - посмотрите, сможете ли вы найти какие-либо подсказки там.

Чтобы получить его, вы добавляете в конец URL ?WSDL см. Пример на http://aspnet.15seconds.com/010430/SampleService.asmx и http://aspnet.15seconds.com/010430/SampleService.asmx?WSDL соответственно.

EDIT:
Я не гуру WSDL и поэтому не могу сказать вам, где проблема.
Другой вариант, который вы можете рассмотреть, - сравнить анализаторы запросов к сервисам - это может дать другие подсказки.

0 голосов
/ 05 января 2010

Я думаю, что нужно проверить используемое пространство имен, у меня была похожая проблема, и она была детализирована, чтобы определить разницу в пространстве имен. Проверить:

[WebService (Namespace = "http://tempuri.org/"]

Это значение по умолчанию, которое может быть в вашем новом веб-сервисе, а ваш старый веб-сервис может использовать другое пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...