2012-06-09 25 views
2

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

但是,当我将响应发送到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"; 
+0

投票关闭 - 家庭作业问题显然不是真的在这里支持的东西。 – TomTom

+0

@TomTom他们是。 –

回答

4

原因你的错误是,你已经得到了状态行语法错误。按照RFC,状态行语法是:

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

你得到周围的响应状态线的部分错误的方式......就像错误信息告诉你的一样!


几点建议:

  • 不要试图说服HTTP或SOAP在这个水平。这些协议非常复杂,现在已经有很好的实现,完善的文档库来完成这种事情。使用它们,不要浪费你的时间重新发明轮子。

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

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

+0

OP:“这是为了班级任务,所以不行,我不能用apis来帮忙,我必须手动做所有事情......” –

+2

@TimS - 所以OP需要找到规范并阅读它以便做他的家庭作业。我会考虑将规范作为作业的一部分。 (此外,他/她应该被告知这不是编写REAL应用程序的方法。) –

+0

我之前有过这种方式,但它会导致另一个问题(通过切换方式来修复)。 如果我有这样的: “HTTP/1.1 100 100-continue \ r \ n \ r \ n”; 它会发送它但c#不会发送正文。我通过切换顺序,然后c#发送正文。那么,如何使用正确的表单并仍然让c#发送给我身体?如果我关闭了输出流,它会导致错误,但是即使在我询问它之后,c#也不会发送主体。 –