0

アプリにログインしようとしているユーザーを認証するには、Web サービス (JSON) を呼び出す必要があります。次のxmlが提供されています

  <summary>
  http://geniewebsvc.cloudapp.net/Member.svc/Authenticate
 </summary>
  <param name="payload">
    {"UserName":"testuser@somedomain.com","Password":"p@$$w0rd"}
  </param>
  <requiredHeaders>
  Content-Type: application/json;charset=UTF-8
  </requiredHeaders>
  <returns></returns>
    [OperationContract]
    [WebInvoke(UriTemplate = "/Authenticate", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    AuthenticateResponse Authenticate(AuthCredentials usernamePassword);

ユーザー ID が既に登録されているかどうかを確認する同様の方法があり、それは Get メソッドです。それは正常に機能し、成功したケースと失敗したケースの両方に対して適切な応答を受け取ります。しかし、すべての投稿方法は私に問題を引き起こしているものです。そして、これらのxmlにはもう1つの違いがあることに気付きました..つまり.. isregistered webservice paramタグは次のようになります..

 <param name="emailAddress"></param>

ここに私の get() と post() があります私の間違いを教えてください...

public void Post()
    {
        RequestState myRequestState = new RequestState();
        try
        {
            System.Uri uri = new Uri(url);
            HttpWebRequest myHttpWebGetRequest;
            Logger.log(TAG, "Create a HttpWebrequest object to the URL", url);
            myHttpWebGetRequest = (HttpWebRequest)WebRequest.Create(uri);
            _mHttpWebRequest = myHttpWebGetRequest;
            myRequestState.conn = this;
            myRequestState.request = myHttpWebGetRequest;
            myRequestState.request.ContentType = "application/json;charset=UTF-8";

            myRequestState.request.Method = "POST";
            myRequestState.request.AllowReadStreamBuffering = false;
            myRequestState.request.Headers["UserName"] = "rick.labarbera@gmail.com";
            myRequestState.request.Headers["Password"] = "125124514";
            // myRequestState.request.Headers["MemberId"] = "UdE8IwmTbxEjmzmMo2nBpg==";

            IAsyncResult result = (IAsyncResult)myHttpWebGetRequest.BeginGetResponse(new AsyncCallback(RespCallback), myRequestState);
        }
        catch (Exception e)
        {
            close(myRequestState);
            if (this.listener != null)
            {
                Logger.log(TAG, "post()", e.Message);
            }
        }
    }

 public void Get()
    {
        RequestState myRequestState = new RequestState();
        try
        {
            System.Uri uri = new Uri(url);
            HttpWebRequest myHttpWebPostRequest;
            Logger.log(TAG, "Create a HttpWebrequest object to the URL", url);
            myHttpWebPostRequest = (HttpWebRequest)WebRequest.Create(uri);
            _mHttpWebRequest = myHttpWebPostRequest;
            myRequestState.conn = this;
            myRequestState.request = myHttpWebPostRequest;
            myRequestState.request.Method = "GET";
            myRequestState.request.AllowReadStreamBuffering = false;

            IAsyncResult result = (IAsyncResult)myHttpWebPostRequest.BeginGetResponse(new AsyncCallback(RespCallback), myRequestState);
        }
        catch (Exception e)
        {
            close(myRequestState);
            if (this.listener != null)
            {
                Logger.log(TAG, "get()", e.Message);
            }
        }
    }

私は何か間違ったことをしていますか???これらのことはすべて私にとって非常に新しいことです..私はひどく助けが必要です..

ありがとう :)

4

1 に答える 1

0

私はあなたのコードで少し遊んだことがありますが、うまくいきませんでした:(

POST() メソッドと GET() メソッドに使用している URL は何ですか?

ところで、サービスを呼び出す別の方法があります。次の手順を実行します:

-- 新しいプロジェクトを作成します。
-- プロジェクト名を右クリックし、[サービス参照の追加] をクリックします。次に、アドレスを「http://geniewebsvc.cloudapp.net/Member.svc」として入力し、[移動] をクリックします。
-- サービス情報がダウンロードされたら、名前空間に「MyMemberService」などを指定し、[OK] をクリックします。

次に、MainPage.xaml.cs に移動し、次のコードを記述します。

MemberServiceClient client = new MemberServiceClient();
client.AuthenticateCompleted += new EventHandler<AuthenticateCompletedEventArgs>(client_AuthenticateCompleted);
client.AuthenticateAsync(new AuthCredentials() { UserName = "rick.labarbera@gmail.com", Password = "125124514" });

AuthenticateCompleted ハンドラは

void client_AuthenticateCompleted(object sender, AuthenticateCompletedEventArgs e)
{
    MessageBox.Show(e.Result.Successful.ToString());
}

このようにして、わずか 2 ~ 3 行のコードで、MemberService 内の任意のサービスを簡単に呼び出すことができます。これは、Visual Studio プロジェクトで SOAP クライアントを呼び出す方法です。

ただし、ここでも、解決する必要がある「エンドポイント構成」の問題がいくつかあります。それができれば、開発時間の少なくとも 30 ~ 40% を節約できます。

幸運を。

于 2012-09-28T10:55:14.523 に答える