2012-06-09 34 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#也不會發送主體。 –