0

PHP 環境から C# (実際には Mono) Web サービスにデータを送信しようとしています。奇妙なことに、Web サービスは、ブラウザーの URL (つまり、GET メソッド) で呼び出すと正しく動作します。

ただし、PHP スクリプトから呼び出すと、Mono 側でパラメーターが受信されないことがわかります。

これが私のPHP呼び出しです:

$domoWSHeader->setAuthenticatedToken($resultAuthentification->AuthentificationResult);
$inputHeaders = new SoapHeader("http://tempuri.org/domo", "DomoWSHeader", $domoWSHeader, false);
$result = $soapClient->__soapCall("MyWebServiceMethod", array("idLight"=>$uuid), NULL, $inputHeaders);

Webservices.asmx は次のようになります。

namespace domo
{
    public class DomoWSHeader : System.Web.Services.Protocols.SoapHeader
    {
            public string username;
            public string password;
            public string authenticatedToken;
    }
    [WebMethod]
    public bool MyWebServiceMethod(int idLight)
    {
    bool success = false;
        //Snip
        return success;
    }
}

私は何を試しましたか? メソッドの前に宣言しようとして[System.Web.Services.Protocols.SoapHeader("DomoWSHeader")]も、動作は変わりませんでした。

web.configまた、ファイルを編集してプロトコルを追加しようとしました。私は C# の世界にまったく慣れていないので、この問題の答えがどこにあるのかわかりません。ここで何が起こっているのかを理解するのを手伝ってくれることを願っています。

4

1 に答える 1

1

PHP.NET から問題の原因を見つけました: http://php.net/manual/fr/soapclient.soapcall.php#110390

PHP コードでは、「__soapCall()」メソッドのパラメーターは次のとおりです。

$parameters = array("idLight" => $uuid);

しかし、それらを使用して webservice メソッドを次のように直接呼び出す場合は正しいです。

$soapClient->NameOfTheMethod($parameters);

私の場合、認証にヘッダーを使用するため、「__soapCall()」で webservice メソッドを呼び出す必要があり、PHP.NET のドキュメントには、パラメーターの配列を次のような別の配列にカプセル化する必要があると記載されています。

$soapClient->__soapCall("NameOfTheMethod", array($parameters), NULL, $inputHeaders);

(「__soapCall()」メソッドの 3 番目と 4 番目のパラメーターはオプションですが、私はそれらを使用することに注意してください)

この助けを願っています:)

于 2013-06-20T09:13:21.677 に答える