在wcf rest中发送xml请求的错误请求400

时间:2010-01-29 06:40:17

标签: wcf rest

我正在编写一个使用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。

请帮帮我。

3 个答案:

答案 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