【问题标题】:Having trouble using Visual Studio Webserver to host a WCF SOAP endpoint使用 Visual Studio Webserver 托管 WCF SOAP 端点时遇到问题
【发布时间】:2011-06-23 10:52:03
【问题描述】:

我有一个已知的工作 Web 服务,它被配置为 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

*******更新*************

虽然这个问题的答案是正确的。我的测试没有。我实际上试图在 IIS 和 Cassini 的 url 中传递一个“//”,但它对 Cassini 不起作用。显然 IIS 在处理引号时更加健壮。下面的 cmets 讨论了这个,但我想我会更新答案。

【问题讨论】:

  • 我真的想帮忙。我以前曾走过这条路。很抱歉,如果它被认为是傲慢的。
  • 公平的朋友,我很感激过去几天我一直是“MVC 提问机”,但我是这里唯一的开发人员,所以我总是卡住,现在似乎已经掌握了窍门。我试图写一篇关于我发现的教程,比如使用调试器来查看发生了什么。我也回答了一些问题。干杯。

标签: c# wcf visual-studio-2010 soap


【解决方案1】:

“不工作”请求的第一行在 URL 中有一个额外的斜杠:

POST http://127.0.0.1:52587/VLSContentService.svc//soap HTTP/1.1
                                                  ^

【讨论】:

  • 你的权利!只见树木不见森林。是完全相同的代码,我在测试工具中输入的 url 是相同的,不知道为什么请求会在其中添加额外的斜杠。猜猜我已经习惯了在调试器中查看双斜杠。谢谢!!! :-)
  • 这真的很奇怪,但我将 IIS 更改为双引号,令人惊讶的是它仍然有效。我认为 IIS 可以处理双斜杠而 Cassini 不能。!
  • 这很有趣。我不知道 HTTP 规范的确切内容(也许双斜杠实际上是可以接受的),但我的猜测是 IIS 团队决定继续接受一些无效的请求,而无需付出额外的努力在卡西尼号。
  • 我通常会清理 URL,将 '\' 替换为 '/',然后将 "//" 替换为 "/"...因为我在各种服务器上看到了类似的问题。我倾向于url 大小写也很明智。
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多