Возникли проблемы при использовании веб-сервера Visual Studio для размещения конечной точки SOF WCF - PullRequest
2 голосов
/ 23 июня 2011

У меня есть известный работающий веб-сервис, который настроен как привязка SOAP и REST. Я могу вызвать его с помощью тестового жгута и увидеть, что SOAP POST собирается, а затем SOAP-ответ все хорошо.

Однако, когда я пытаюсь разместить службу в Visual Studio 2010 Cassini, я получаю следующее поведение:

1) При вызове конечной точки как REST и использовании класса WebChannelFactory сервис работает.
2) При вызове конечной точки как SOAP и использовании класса ChannelFactory служба выдает ошибку, и я получаю ответ 400. (Ошибка ниже).
3) При вызове конечной точки как SOAP и использовании ссылки c # SOAP сервис работает.

Запутывает нет?

Мне интересно, это как-то связано с тем, что я использовал номер порта для версии Cassini?


незадолго до того, как люди начали рассказывать мне о размещении в IIS, мне действительно нужно, чтобы это работало в Cassini как часть учебника по WCF


Вот необработанный необработанный HTTP-запрос (при вызове против работающего развертывания IIS и неисправного веб-сервера Visual Studio.

IIS РАБОТАЕТ:

POST http://api.dev.videolibraryserver.com/VLSContentService.svc/soap/ HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IVLSContentService/EchoWithGet"
Host: api.dev.videolibraryserver.com
Content-Length: 180
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><EchoWithGet xmlns="http://tempuri.org/"><message>Hello World!</message></EchoWithGet></s:Body></s:Envelope>

ВИЗУАЛЬНАЯ СТУДИЯ (КАССИНИ) - НЕ РАБОТАЕТ:

POST http://127.0.0.1:52587/VLSContentService.svc//soap HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IVLSContentService/EchoWithGet"
Host: 127.0.0.1:52587
Content-Length: 180
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><EchoWithGet xmlns="http://tempuri.org/"><message>Hello World!</message></EchoWithGet></s:Body></s:Envelope>

РЕАГИРОВАНИЕ НА ОШИБКИ ПРИ ИСПОЛЬЗОВАНИИ CASSINI

HTTP/1.1 400 Bad Request
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 23 Jun 2011 10:42:09 GMT
Content-Length: 1209
Content-type: text/html;charset=utf-8
Connection: Close

<html>
    <head>
        <title>Bad Request</title>
        <style>
            body {font-family:"Verdana";font-weight:normal;font-size: 8pt;color:black;} 
            p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
            b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
            h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
            h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
            pre {font-family:"Lucida Console";font-size: 8pt}
            .marker {font-weight: bold; color: black;text-decoration: none;}
            .version {color: gray;}
            .error {margin-bottom: 10px;}
            .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
        </style>
    </head>
    <body bgcolor="white">

            <span><h1>Server Error in '/' Application.<hr width=100% size=1 color=silver></h1>

            <h2> <i>HTTP Error 400 - Bad Request.</i> </h2></span>

            <hr width=100% size=1 color=silver>

            <b>Version Information:</b>&nbsp;ASP.NET Development Server 10.0.0.0

            </font>

    </body>
</html>

ИСКЛЮЧЕНИЕ .NET (хотя и не имеет значения, так как ответ от сервера не возвращается)

C:\Users\Peter Heard\Desktop\TestClient\Debug>TestClient.exe "http://ipv4.fiddle
r:52587/VLSContentService.svc/" "Hello World!" 2


***************************
About to call SOAP web service interface TestSOAPUsingChannelFactory()
There was an errorSystem.ServiceModel.ProtocolException: The remote server retur
ned an unexpected response: (400) Bad Request. ---> System.Net.WebException: The
 remote server returned an error: (400) Bad Request.
   at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpCha
nnelRequest.WaitForReply(TimeSpan timeout)
   --- End of inner exception stack trace ---

Server stack trace:
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResp
onse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factor
y, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpCha
nnelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeS
pan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message messag
e, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean on
eway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan tim
eout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCall
Message methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage req
Msg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgDa
ta, Int32 type)
   at IVLSContentService.EchoWithGet(String message)
   at TestClient.Program.TestSOAPUsingChannelFactory() in C:\Repositories\VideoL
ibraryServer\trunk\prototypes\Hml_Api_Wcf\TestClient\Program.cs:line 96
   at TestClient.Program.Main(String[] args) in C:\Repositories\VideoLibraryServ
er\trunk\prototypes\Hml_Api_Wcf\TestClient\Program.cs:line 47

******* Обновление *************

Хотя ответ на этот вопрос был правильным. Мое тестирование не было. Я на самом деле пытался передать «//» в URL для IIS и Cassini, и это не сработало для Cassini. Очевидно, что IIS немного более надежен при обработке кавычек. Комментарии ниже говорят об этом, но я думал, что обновлю ответ.

1 Ответ

1 голос
/ 23 июня 2011

В первой строке вашего "не работающего" запроса есть дополнительный слеш в URL:

POST http://127.0.0.1:52587/VLSContentService.svc//soap HTTP/1.1
                                                  ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...