Webservices对象引用未设置为对象错误的实例

时间:2012-09-27 11:55:46

标签: json web-services windows-phone-7 httpwebrequest

我必须调用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);

有一个类似的用于检查用户标识是否已经注册并且是否为Get方法。这很好,我收到成功和不成功案件的正确答案。但是所有的帖子方法都给我带来了麻烦。我注意到这些xmls还有一个不同之处..即,注册的webservice param标签就像这样......

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

这是我的get()和帖子()请让我知道我的错误......

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);
            }
        }
    }

我做错了什么?所有这些对我来说都是非常新的......我需要帮助很严重..

谢谢:)

1 个答案:

答案 0 :(得分:0)

我玩了一些你的代码,但无法做到:(

您使用POST()方法和GET()方法的URL是什么。?

顺便说一下,还有另一种方法来调用你的服务。请按照以下步骤操作:

- 创建一个新项目 - 右键单击​​项目名称,然后单击“添加服务引用”...然后提供地址“http://geniewebsvc.cloudapp.net/Member.svc”并单击“转到”。
- 下载服务信息后,为Namespace提供类似“MyMemberService”的内容,然后单击“确定”。

然后转到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%的开发时间。

祝你好运。