我正在编写一个使用wcf rest进行身份验证的示例应用程序。以下是代码的快照:
服务界面:
[ServiceContract]
public interface IAuthenticate
{
[OperationContract]
[WebInvoke(BodyStyle=WebMessageBodyStyle.Bare,
Method = "POST", UriTemplate = "/VUser",RequestFormat= WebMessageFormat.Xml ), ]
string CreateUser(VUser user);
}
Datacontract类:
[DataContract]
public class VUser
{
public VUser()
{
}
[DataMember]
public string NickName { get; set; }
[DataMember]
public string lName { get; set; }
[DataMember]
public string fName { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string PhoneNumber { get; set; }
[DataMember]
public string Password { get; set; }
[DataMember]
public string Gender { get; set; }
[DataMember]
public int CountryCode { get; set; }
}
服务类:
public class Authenticate : IAuthenticate
{
#region IAuthenticate members
public string CreateUser(Vuser user)
{
//processing xml for response
}
#endregion IAuthenticate
}
客户代码:
Uri baseAddress = new Uri("http://localhost:8000");
using (WebServiceHost host = new WebServiceHost(typeof(Authenticate), baseAddress))
{
host.Open();
Console.WriteLine("Press any key to terminate");
Console.ReadLine();
host.Close();
}
现在我正在使用fiddler在host.open()之后发送请求并发送请求已显示:
发布http://localhost:8000/Vuser/
User-Agent:Fiddler 主持人:localhost:8000 内容长度:233 content-type:text / xml
并在请求正文中:
沙 [R 苏尼尔 sunil.r 919900101948 冬季 男 01
但它返回HTTP / 1.1 400错误请求。我的问题是我是否正确地将vuser类传递给create user方法,或者是否有其他方式来发送vuser。
请帮帮我。
答案 0 :(得分:0)
这可能是序列化的一个问题。
序列化使用默认的consrtuctor,不带参数。
在C#中,如果使用参数创建构造函数,编译器将自动创建默认构造函数 。
Authenticate类缺少默认构造函数,因此您将通过WCF发送问题。
答案 1 :(得分:0)
请在DataContract类
中指定Datacontract命名空间[DataContract(Namespace =“http://xxx.xxx.xxx/Service.svc”)]
并在Xml文件中使用相同的内容
答案 2 :(得分:0)
客户端和服务器中的命名空间应该匹配。尝试将命名空间名称添加为
<div>
<h1>Test</h1>
</div>
在服务器合同中。然后确保 xml 字符串具有相同命名空间的 xmlns 值
[DataContract(Namespace = "http://sample.com")]
public class VUser