2009-05-29 32 views
1

getパラメータを使用せずにASP.NET Webサービスからの応答を取得しようとしています。私は次のコードを持っています。Asp Classic SOAPリクエストを使用したWebサービスの呼び出し

strBarcode = "ABC123 
strURL ="http://serverName/BarcodeGenerator.asmx" 
Set xmlReq = Server.CreateObject("Msxml2.DOMDocument.3.0") 
Set xmlResp = Server.CreateObject("Msxml2.DOMDocument.3.0") 
Set httpReq = Server.CreateObject("MSXML2.ServerXMLHTTP") 


xmlReq.async = false 
strXML = CStr(CreateRequest(strBarcode)) 

xmlReq.loadXML(CStr(strXML)) 

//Open, async 

httpReq.open "POST", CStr(strURL), true 

httpReq.setRequestHeader "Host", "serverName" 
httpReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8" 
httpReq.setRequestHeader "SOAPAction", "http://tempuri.org/GetBarcode" 

httpReq.send(xmlReq) 



strDone = "0" 
bTimeout = false 
dStart = Now() 
dEnd = Now() 
lCounter = 0 
lCounterPrev = -1 
intStatus = 0 
Do while intStatus <> 4 and (Not bTimeout) 
    dEnd = Now() 
    lCounter = DateDiff("s",dStart,dEnd) 

    if lCounter > 30 then bTimeout = True  
    %>. <%  
    'Wait a second 
    httpReq.waitForResponse 1000 
    intStatus = httpReq.readyState 
Loop 

If httpReq.readyState = 4 Then 
    bTimeout = false 
    Set xmlResp = httpReq.responseXML 
    %> 
    Status: <%=httpReq.statusText%><BR> 
    Response: <%=httpReq.responseText%> <BR><BR> 
    <% 
    Set nodes = xmlResp.getElementsByTagName("GetBarcodeResult") 
    If (nodes is nothing) THen 
    %>Nodes is NULL<BR><% 
    Else 
    %>Number of Nodes: <%=nodes.length%><% 
    End IF 
    Set node = nodes(0) 
    url = node.nodeValue 
End If 

ステータスが

ステータスです:不正な要求

と応答が

レスポンスです:不正な要求(無効なホスト名)

私は間違って何をしていますか?

答えて

1

このarticleが最もよく説明されていますが、基本的にはIISの設定により、サーバーが見つかりませんでした(従来のaspとwebserviceは同じサーバーでホストされていました)。コードに問題はありません。関連資料でお答えください。

+0

これは答えではありません。この補足情報を質問に追加し、この回答を削除する必要があります。 – AnthonyWJones

+0

これはどのように答えになりませんか?それは私の問題を解決しました。回答には他にどんな基準がありますか? –

+0

「関連資料で回答してください」という文章は、他の回答がまだ必要であるかのように見せました。 – AnthonyWJones

1

あなたのコードは、ホストヘッダー自体を設定しようとしています。あなたはこれをしてはいけません。

ServerXMLHTTPは、提供されたURLからホスト文字列を引き出すためにこれを行います。自分で追加しようとすると、HTTPプロトコルの重要な基準が破損しています。ホストは1.1プロトコルの中で最も基本的なヘッダーであり、1.1要求に存在しなければならない唯一のヘッダーです。

非同期要求とWaitForResponseを使用してタイムアウトを検出する理由がわかりません。なぜsetTimeoutsメソッドと同期リクエストを使用しないのですか?

+0

ホストノートに感謝します。 asyncが実行される限り、ロードされていない限り、プログレスバーを表示するという既存の機能をそのまま維持しています。 –

+0

十分に公正ですが、ASP内の非同期WinHTTPは私の経験では少し壊れやすいかもしれません。 – AnthonyWJones

+0

それは公正です。私はIIS 6のASPが一般的に壊れやすいことがあることを知っています。 –

関連する問題