2009-03-06 47 views
2

私は、既存の古典的なASPプログラムがasp.net Webサービスを使用するためのコードを作成しようとしています。私は大企業で働いているので、古典的なASPからのアップデートはオプションではありません。古典的なASP Webサービスの問題

私はチュートリアルの塊をブラウズしていると思われますが、これを手伝ってもらえませんでした。初心者としては、私はいくつかの本当の明白な間違いをしたかもしれないが、私はちょうど何がわからない。

まず、Webサービスは外部サーバーにあります。メソッド "Greeting"には、どのStringを返すかを決定するStringパラメータが必要です。それに対して "G" を入力すると、このXMLをprocudes:

 
    <?xml version="1.0" encoding="utf-8" ?> 
    <string xmlns="http://server1/Logger_WebService/">Greetings and welcome!</string> 

私は内容を取得するためのXPathは、 "文字列/ *" または "*" のいずれかであると仮定しますか?

次に、自分のWebサービス自体は、次のようになります

 
    <WebMethod()> _ 
    Public Function Greeting(ByVal stringel As String) As String 

     If stringel.ToLower = "g" Then 
      Return "Greetings and welcome!" 
     Else 
      Return "Bye then!" 
     End If 

    End Function 

Webサービスは、通常のasp.net溶液から正常に動作します。

これは問題です。古典的なaspコードはこのように見えます(SOAPツールキットはWebサービスサーバーにインストールされていますが、チュートリアルからすべての例が取られ、変更されています):

 
'******* USING GET METHOD 
Dim wsurl="http://server1/Logger_WebService/service.asmx/Greeting?g" 
Dim xmlhttp 
Set xmlhttp=Server.CreateObject("MSXML2.ServerXMLHTTP") 
xmlhttp.open "GET",wsurl,false 
xmlhttp.send 
Dim rValue 
'rValue=xmlhttp.responseXML.selectSingleNode("string") 'use XPATH as input argument 
' or you can get response XML 
rValue=xmlhttp.responseXML 
Set xmlhttp=nothing 

'------------------------------------------------------ 

'******* USING POST METHOD 
Dim wsurl="http://server1/Logger_WebService/service.asmx/Greeting" 
Dim xmlhttp 
Set xmlhttp=Server.CreateObject("MSXML2.ServerXMLHTTP") 
xmlhttp.open "POST",wsurl,false 
xmlhttp.send "stringeli=g" 
Dim rValue 
rValue=xmlhttp.responseXML.selectSingleNode("string") 
' or you can get response XML 
' rValue=xmlhttp.responseXML 
Set xmlhttp=nothing 

'------------------------------------------------------ 

Response.Write consumeWebService() 

Function consumeWebService() 
    Dim webServiceUrl, httpReq, node, myXmlDoc 

    webServiceUrl = "http://server1/Logger_WebService/service.asmx/Greeting?stringel=g" 

    Set httpReq = Server.CreateObject("MSXML2.ServerXMLHTTP") 

    httpReq.Open "GET", webServiceUrl, False 
    httpReq.Send 

    Set myXmlDoc =Server.CreateObject("MSXML.DOMDocument") 
    myXmlDoc.load(httpReq.responseBody) 

    Set httpReq = Nothing 

    Set node = myXmlDoc.documentElement.selectSingleNode("string/*") 

    consumeWebService = " " & node.text 

End Function 

'------------------------------------------------------ 

    Response.Write(Helou()) 

    Public Function Helou() 
    SET objSoapClient = Server.CreateObject("MSSOAP.SoapClient") 
    objSoapClient.ClientProperty("ServerHTTPRequest") = True 

    ' needs to be updated with the url of your Web Service WSDL and is 
    ' followed by the Web Service name 
    Call objSoapClient.mssoapinit("http://server1/Logger_WebService/service.asmx?WSDL", "Service") 

    ' use the SOAP object to call the Web Method Required 
    Helou = objSoapClient.Greeting("g")  
    End Function 

私は真剣に何が機能しない理由はわかりません、私は一つの可能​​性のある問題は、Webサービスは、ASP.Netで私を必要なサーバ上に配置されていることであるなど、さまざまな設定の負荷で彼らにすべてのどの方法を試してみましたこの "[ServiceVariableName] .Credentials = System.Net.CredentialCache.DefaultCredentials"を入力します。私は会社のネットワーク内からこれを行い、いくつかのセキュリティと認証の問題があります。

私が使用する実際の方法は、情報をデータベースに挿入するため、受信するのではなく、情報を送信する必要があります。しかし、今のところ、Hello Worldの恋人を働かせているだけでは、十分な挑戦を提供するようです。 :)

すべてのヘルプ。私は祝日をチェックしてコメントに返信することを試みるつもりですが、私は間違いなく必要な情報を残しました。

あなたがばかにするように話してください、私はこれには新しいので、チャンスは私がそのように良く理解できることです。 :)

答えて

1

同僚は、最終的にはそこに一日置いた後、作業それを得ました。それはそれを受け取るよりも情報を送ることがはるかに簡単であると判断されました。 Webサービスの最終的な目的はDBにデータを書き込んでメッセージを返さないことなので、Webサービスにファイルを書き込むだけで試行しました。

次の変更が必要であった:

まず、それが会社のネットワークを通じて仕事を得るためには、匿名アクセスがIISで有効にする必要がありました。そのように変更しました

 
<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    </protocols> 
</webServices> 

とWebサービスコードビハインド:

 
<WebMethod()> _ 
    Public Function Greeting(ByVal stringel As String) As String 

     Dim kirj As StreamWriter 
     'kirj = File.CreateText("\\server1\MyDir\Logger_WebService\test.txt") 
     'if run locally, the line above would need to be used, otherwise the one below 
     kirj = File.CreateText("C:\Inetpub\serverroot\MyDir\Logger_WebService\test.txt") 

     kirj.WriteLine(stringel) 
     kirj.Close() 
     kirj.Dispose() 

     Return stringel 
    End Function 

私たちが仕事をする上で得たよう

は、Webサービスは、web.configファイルに以下の変更を必要とそれを解析して情報をチェックしてデータベースに挿入する大きなWebメソッドに同じものを適用するのは簡単なことでした。

最後のページに追加する必要がある古典的なaspコードそのものは、最大の問題でしたが、結局は比較的シンプルであることが判明しました。

 
function works() 
    message = "http://server1/mydir/logger_webservice/service.asmx/Greeting?" & _ 
      "stringel=" & "it works" 
    Set objRequest = Server.createobject("MSXML2.XMLHTTP") 

    With objRequest 
    .open "GET", message, False 
    .setRequestHeader "Content-Type", "text/xml" 
    .send 
    End With 

    works = objRequest.responseText 
end function 
works() 

これを解決するために約1週間分の作業を行いました。 :/一番難しいのは、一度に何が間違っていたかを今まで知りませんでした。

+0

修正プログラムはあなたの回答に隠されています:MSXML2.ServerXMLHTTPをMSXML2.XMLHTTPに変更すると、自動的に認証が機能します。 – user3902302

0

SOAPActionヘッダーが不足している可能性があります。

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class GreetingService : WebService 
{ 
    [WebMethod] 
    public string Greet(string name) 
    { 
     return string.Format("Hello {0}", name); 
    } 
} 

そして、呼び出し元のVBSスクリプト:

Dim SoapRequest 
Set SoapRequest = CreateObject("MSXML2.XMLHTTP") 

Dim myXML 
Set myXML = CreateObject("MSXML.DOMDocument") 


myXML.Async=False 
SoapRequest.Open "POST", "http://localhost:4625/GreetingService.asmx", False 
SoapRequest.setRequestHeader "Content-Type","text/xml;charset=utf-8" 
SoapRequest.setRequestHeader "SOAPAction", """http://tempuri.org/Greet""" 

Dim DataToSend 
DataToSend= _ 
    "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tem=""http://tempuri.org/"">" & _ 
     "<soapenv:Header/>" & _ 
     "<soapenv:Body>" & _ 
      "<tem:Greet>" & _ 
       "<tem:name>John</tem:name>" & _ 
      "</tem:Greet>" & _ 
     "</soapenv:Body>" & _ 
    "</soapenv:Envelope>" 

SoapRequest.Send DataToSend 

If myXML.load(SoapRequest.responseXML) Then 
    Dim Node 
    Set Node = myXML.documentElement.selectSingleNode("//GreetResult") 
    msgbox Node.Text 

    Set Node = Nothing 
End If 

Set SoapRequest = Nothing 
Set myXML = Nothing 
1

あなたはWebサービスを利用するために、.NETラッパーコードのビットを書いて検討するかもしれないここで働い例です。 ASPが直接呼び出すことができるCOMオブジェクトとして.NETコードを公開します。これまで見てきたように、従来のASPでは手助けをするツールはありません。できるだけ多くの.NETをツールとして使用することを検討してください。次に、COMを使用して2つの間で相互運用します。

0

MSXMLコンポーネントのバージョンを再確認したい場合があります。 Windows認証を使用していますか?私は、IIS 7、Classic ASP、およびMSXMLで奇妙なXML解析の問題に気付きました。

有用なエラーを得るのにも役立ちます。 ** myXML.parseError.errorCode **をチェックし、そうでない場合はエラーを出力します。

リファレンスコード:

If (myXML.parseError.errorCode <> 0) then 
    Response.Write "XML error: " & myXML.parseError.reason 
Else 
    'no error, do whatever here 
End If 
'You get the idea... 
関連する問題