【问题标题】:Webservices object reference not set to an instance of an object errorWebservices 对象引用未设置为对象错误的实例
【发布时间】:2012-09-19 04:55:18
【问题描述】:

我必须调用 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 方法。这很好,我收到了成功和不成功案例的正确响应。但是所有的 post 方法都是给我带来麻烦的方法。我注意到这些 xml 中还有一个不同之处.. 即.. 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);
            }
        }
    }

我是不是做错了什么???所有这些事情对我来说都是非常新的……我非常需要帮助……

谢谢:)

【问题讨论】:

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


    【解决方案1】:

    我用你的代码玩了一点,但没能成功:(

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

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

    -- 创建一个新项目。
    -- 右键单击​​项目名称并单击“添加服务引用”...然后提供地址为“http://geniewebsvc.cloudapp.net/Member.svc”并单击“Go”。
    -- 下载服务信息后,提供“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% 的开发时间。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 2012-08-31
      • 2011-11-21
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多