C#WSDL客户端请求包

C#WSDL客户端请求包,c#,http,soap,wsdl,wireshark,C#,Http,Soap,Wsdl,Wireshark,我目前正在使用“添加服务引用”将SOAP-WSDL服务添加到我的项目中。它为我创建了所有需要调用的类和函数。其中一些函数没有给我一个响应。延迟1分钟后,我得到一个超时异常。然而,当我使用Postman(一个用于发出网络请求的chrome扩展)伪造请求时,它会得到完整的响应。我开始怀疑并开始使用Wireshark检查网络。检查后,我发现问题出在维修处。但我不能让他们解决这个问题。所以我需要用C#模拟邮递员的请求 我的和邮递员的主要区别在于,邮递员在响应的单个请求中发布所有必要的数据,但我的客户端只

我目前正在使用“添加服务引用”将SOAP-WSDL服务添加到我的项目中。它为我创建了所有需要调用的类和函数。其中一些函数没有给我一个响应。延迟1分钟后,我得到一个超时异常。然而,当我使用Postman(一个用于发出网络请求的chrome扩展)伪造请求时,它会得到完整的响应。我开始怀疑并开始使用Wireshark检查网络。检查后,我发现问题出在维修处。但我不能让他们解决这个问题。所以我需要用C#模拟邮递员的请求

我的和邮递员的主要区别在于,邮递员在响应的单个请求中发布所有必要的数据,但我的客户端只发布http头,等待http继续并继续发送必要的数据。我想这会破坏服务

这是给邮递员和我的客户的wireshark截图

(图的左边是邮递员,右边是我的.net客户端-很抱歉我画得太完美了)

在.net wsdl客户机上是否有我可以配置为对调用发出单个请求的basicHttpBinding配置

编辑:当我进一步调查我的C#客户机时,我看到.NETHTTP层发送了一个带有say(期望:100 Continue)的初始帖子,在收到Continue后,它继续发送SOAP信封

edit2:我更改了代码,使用HttpWebRequest发出请求,但.net仍然使用单独的请求发送标题和帖子正文(即使我禁用Expect:100 Continue),理论上这会中断服务

问题2:有没有说HttpWebRequest,不拆分标题和正文?在一个请求中发送所有这些内容


编辑3:我解决了这个问题。但这不是100美元。由于缺少HttpWebRequest的用户代理头,服务被中断。您可以将以下内容添加到.config文件中-我们在服务中使用此文件。然而,我不确定它是如何影响WCF频道的

<configuration>
  <system.net>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>
  </system.net>
</configuration>

我终于解决了这个问题。经过长时间的检查和尝试之后,我发现如果不添加用户代理HTTP报头,远程服务在数据通信中间停止响应。所以我在每个请求之前使用IClientMessageInspector添加了http头

如果有人需要,这里有wcf代码

    public object BeforeSendRequest(ref Message request, IClientChannel channel)
    {
        HttpRequestMessageProperty realProp;
        object property;
        //check if this property already exists
        if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out property))
        {
            realProp = (HttpRequestMessageProperty) property;
            if (string.IsNullOrEmpty(realProp.Headers["User-Agent"])) //don't modify if it is already set
            {
                realProp.Headers["User-Agent"] = "doktorinSM/2.1";
            }
            return null;
        }

        realProp = new HttpRequestMessageProperty();
        realProp.Headers["User-Agent"] = "doktorinSM/2.1";
        request.Properties.Add(HttpRequestMessageProperty.Name, realProp);
        return null;
    }

你有没有在你的装订上设置传送带?嗯,我想没有。我认为这对解决这个问题没有帮助。服务不需要任何通信安全性怎么会这样?如果您将此添加到您的客户机中,因为您的许多编辑中有一个使用了HttpWebRequest,它将阻止您的客户机发出两个请求(即带有“Expect:100 continue”的标题,然后是正文),而不是发出带有all的单个请求。如果这不是你想要的也许你应该把你的问题说得更清楚是的,很抱歉。我以为问题是100%左右。但后来我发现它是关于缺少用户代理属性的。我应该删除问题吗?顺便说一下,expect100Continue并不能消除两个请求问题。它只是禁用了来自服务器的100 Continue响应