我必须调用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);
}
}
}
我做错了什么?所有这些对我来说都是非常新的......我需要帮助很严重..
谢谢:)
答案 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%的开发时间。
祝你好运。