2

我有 ac#“客户端”和一个 Java“服务器”。java 服务器有一个 wsdl 服务于客户端。到目前为止,它适用于 c# 向服务器发出请求以执行肥皂操作。我的服务器获取soap请求执行该方法并尝试将结果返回给客户端。

但是,当我将响应发送到 c# 时,我得到“服务器违反了协议。Section=ResponseStatusLine”。

我花了一整天的时间试图解决这个问题,但没有想出任何可行的方法。如果我解释我做了什么,这篇文章会很长,所以我会保持简短。

我用谷歌搜索了几个小时,一切都告诉我我的“回复线”是正确的。我尝试关闭 Skype,重新安排响应热线,添加东西,拿走东西等等。一切都无济于事。

这是一个课堂作业,所以不,我不能使用 apis 来帮助。我必须在服务器端手动完成所有操作。这意味着手动解析,手动创建soap响应和http响应。只是想在你说使用对我有用的东西之前你想知道这一点。

我什至尝试通过创建一个“模仿”c# 的 java 客户端来确保我的服务器发送正确的标头,这样我就可以看到服务器返回的内容。但是,它返回的正是我告诉它发送的内容。

我试着告诉我的 java 客户端做同样的事情,但对一个实际运行的 c# 服务,看看一个真正的服务返回什么,它返回基本相同的东西。为了安全起见,我复制了它的响应并尝试将其发送到 c# 客户端,但它仍然抛出错误。

任何人都可以帮忙吗?我已经尝试了所有我能想到的方法,包括将 useUnsafeHeaderParsing 添加到我的应用程序配置中。什么都没有工作。我发送的正是真正的服务发送的,它对我大喊大叫。我把我想要的东西寄给它,它会大喊大叫。

我发送这个:

"200 OK HTTP/1.0\r\n" +
"Content-Length: 201\r\n" +
"Cache-Control: private\r\n" +
"Content-Type: text/xml; charset=utf-8\r\n\r\n";
4

1 回答 1

4

您的错误的原因是您的状态行语法错误。根据 RFC,状态行语法是:

状态行 = HTTP 版本 SP 状态代码 SP 原因短语 CRLF

您以错误的方式获得了响应状态行的部分……就像错误消息告诉您的那样!


一些忠告:

  • 不要试图在这个级别谈论 HTTP 或 SOAP。这些协议很复杂,并且现有的执行良好、文档良好的库可以做这种事情。使用它们,不要浪费时间重新发明轮子。

  • 如果您确实想要/需要自己实现这些东西,那么阅读并理解相关规范至关重要。使用 Google 很容易找到它们。

(我不打算提供链接,因为那只会鼓励你浪费时间在构建相当于方形轮子马车的软件上。因为你需要学会自己找到和使用它们......当然.)

于 2012-06-09T02:06:17.437 回答