c# - 用于调用 WCF Web 服务的确切 HTTP 内容是什么?

标签 c# .net wcf

我有一个 WCF 服务,它是使用 Visual Studio 2013 新建项目 向导创建的。我可以使用工作正常的 WCF 测试客户端 调用此服务。但是,我想使用 curl 从命令行调用该服务。

我所做的是从 WCF 测试客户端复制请求内容,如下所示:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService1/TestStr</Action>
  </s:Header>
  <s:Body>
    <TestStr xmlns="http://tempuri.org/" />
  </s:Body>
</s:Envelope>

并将其保存在名为 Test.txt 的文件中。然后,我从命令行执行了以下操作:

curl --verbose --header "Content-Type:text/xml; charset=utf-8" -X POST -d @Test.txt http://localhost:64777/Service1.svc

我得到的是:

* Adding handle: conn: 0x50e5a0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x50e5a0) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 64777 (#0)
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 64777 (#0)
> POST /Service1.svc HTTP/1.1
> User-Agent: curl/7.33.0
> Host: localhost:64777
> Accept: */*
> Content-Type:text/xml; charset=utf-8
> Content-Length: 343
>
* upload completely sent off: 343 out of 343 bytes
< HTTP/1.1 400 Bad Request
< Cache-Control: private
* Server Microsoft-IIS/8.0 is not blacklisted
< Server: Microsoft-IIS/8.0
< X-AspNet-Version: 4.0.30319
< X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcbWNocmlzdGVuc2VuXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTNcUHJvamVjdHNcV2NmR2VuZXJpY3NcV2NmR2VuZXJpY3NcU2VydmljZTEuc3Zj?=
< X-Powered-By: ASP.NET
< Date: Tue, 06 May 2014 18:47:29 GMT
< Content-Length: 0
<
* Connection #0 to host localhost left intact

WCF 测试客户端调用我的网络服务的方式与 Curl 调用我的网络服务的方式有什么区别?我的网址错了吗?我是否缺少一些 HTTP header ?谢谢!

更新:

我也尝试了 URL http://localhost:64777/Service1.svc/TestStr。我也试过对文件进行编码:

%3Cs%3AEnvelope%20xmlns%3As%3D%22http%3A%2F%2Fschemas.xmlsoap.org%2Fsoap%2Fenvelope%2F%22%3E%0A%20%20%3Cs%3AHeader%3E%0A%20%20%20%20%3CAction%20s%3AmustUnderstand%3D%221%22%20xmlns%3D%22http%3A%2F%2Fschemas.microsoft.com%2Fws%2F2005%2F05%2Faddressing%2Fnone%22%3Ehttp%3A%2F%2Ftempuri.org%2FIService1%2FTestStr%3C%2FAction%3E%0A%20%20%3C%2Fs%3AHeader%3E%0A%20%20%3Cs%3ABody%3E%0A%20%20%20%20%3CTestStr%20xmlns%3D%22http%3A%2F%2Ftempuri.org%2F%22%20%2F%3E%0A%20%20%3C%2Fs%3ABody%3E%0A%3C%2Fs%3AEnvelope%3E

两者都只会导致Bad Request

最佳答案

您可以使用 Fiddler 来捕获准确的 HTTP 请求。不幸的是,WCF 跟踪不会捕获通过线路发送的确切字节。它报告已发送的实际 XML 的修改副本。 Fiddler 不了解 Web 服务,因此它不会执行这些操作。

关于c# - 用于调用 WCF Web 服务的确切 HTTP 内容是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23502659/

相关文章:

wcf - 如何在服务器和客户端之间同步复杂的域对象结构

c# - 无法在 WCF 中转换为相同类型

c# - 在 C# 中重用数组

c# - 一种将 div id 存储为字符串并通过 javascript 将其发送到按钮单击事件的方法

c# - Jwt 无法有效发布者或受众

c# - LINQ 比较 2 个表(有点像 SQL 除了?)

mysql - 使用 sql 审核 .net 应用程序

.net - 有没有办法以编程方式连接 Excel 文件?

c# - 在基类的惰性方法中获取继承类名

javascript - WCF Rest Api 日期时间 JSON 序列化问题