0

10日から検索しますが、wp7での石鹸解析に成功していません。

私のコードは以下の通りです。リモートサーバーがエラーを返しました:NotFound。およびSystem.Net.WebException。

コードは以下のとおりです:

 private const string AuthServiceUri = "http://manarws.org/WS/manarService.asmx";
    private const string AuthEnvelope =
                       @"<?xml version=""1.0"" encoding=""utf-8""?>
                    <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                        <soap:Body>
                            <fnGetNewsResponse xmlns=""http://tempuri.org/"">
                               <fnGetNewsResult></fnGetNewsResult>
                               </fnGetNewsResponse>                
                        </soap:Body>
                    </soap:Envelope>";

 public void Authenticate()
    {
        HttpWebRequest spAuthReq = HttpWebRequest.Create(AuthServiceUri) as HttpWebRequest;
        spAuthReq.Headers["SOAPAction"] = "http://tempuri.org/fnGetNews";
        spAuthReq.ContentType = "text/xml; charset=utf-8";
        spAuthReq.Method = "POST";
        spAuthReq.BeginGetRequestStream(new AsyncCallback(spAuthReqCallBack), spAuthReq);
    }

 private void spAuthReqCallBack(IAsyncResult asyncResult)
    {
        UTF8Encoding encoding = new UTF8Encoding();
        HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
        System.Diagnostics.Debug.WriteLine("REquest is :" + request.Headers);
        Stream _body = request.EndGetRequestStream(asyncResult);
        string envelope = string.Format(AuthEnvelope,"","");
        System.Diagnostics.Debug.WriteLine("Envelope is :" + envelope);
        byte[] formBytes = encoding.GetBytes(envelope);
        _body.Write(formBytes, 0, formBytes.Length);
        _body.Close();
        request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);
    }

 private void ResponseCallback(IAsyncResult asyncResult)
    {
        System.Diagnostics.Debug.WriteLine("Async Result is :" + asyncResult);

        HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);

        System.Diagnostics.Debug.WriteLine("Response is :::::::::::::::::::----" + request.EndGetResponse(asyncResult));

        if (request != null && response != null)
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string responseString = reader.ReadToEnd();
            }
        }
    }

行にエラーが表示されHttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);ます...

だから、助けてください。

ありがとう。

4

3 に答える 3

3

何かが足りないのかもしれませんが、サービス参照を追加しないのはなぜですか?

http://manarws.org/WS/manarService.asmx」にあるサービスは従来の Web サービスで、wsdl を参照できます。Visual Studio で参照を追加できます。この Web サービスを呼び出すプロキシ クラスが生成されます。手動での石鹸の解析は非常に面倒です。

編集 :

1) プロジェクトのサービス参照を右クリックします。

ステップ1

2) サービス URL を入力します。次に、[移動] をクリックします。

ステップ2

3) プロジェクトに新しいクラスが作成されます。

必要に応じて使用してください。例:

public void GetBranches()
{
    ManarServiceReference.manarServiceSoapClient client = new ManarServiceReference.manarServiceSoapClient();
    client.fnGetBranchesCompleted += new EventHandler<ManarServiceReference.fnGetBranchesCompletedEventArgs>(client_fnGetBranchesCompleted);
    client.fnGetBranchesAsync();
}

void client_fnGetBranchesCompleted(object sender, ManarServiceReference.fnGetBranchesCompletedEventArgs e)
{
    //TODO
}
于 2012-10-08T13:31:06.610 に答える
1

以下の手順に従って、SOAP サービスの使用方法を理解してください。

-- Create a new project.
-- Right-click on the Project name and click on "Add Service Reference"...
   Then provide address as "http://manarws.org/WS/manarService.asmx?wsdl" and click Go.
-- Once service information is downloaded, provide Namespace something like
   "MyMemberService" at the bottom and click Ok.

これで、プロキシ クラスの準備が整いました。
Mainpage.xaml.cs に移動し、そこに「client」と入力します。おそらく、「ManarServiceClient」という名前のクラスを取得する必要があります。

それが得られたら、そのクラスの適切なメソッドを呼び出してみてください。

たとえば、

ManarServiceClient client = new ManarServiceClient();
client.fnGetNewsResponseCompleted += new EventHandler<fnGetNewsResponseCompletedEventArgs>(client_fnGetNewsResponseCompleted);
client.fnGetNewsResponseAsync();

注:私は自分の作業システムを使用していないため、正確なコードを提供することはできません. 上記はすべて推測されたコードであり、正しい方向を示しています。私のコードをテストし、すぐに更新します。

于 2012-10-08T13:51:42.247 に答える