相关疑难解决方法(0)

WCF BodyStyle WrappedRequest对传入的JSON参数不起作用?

我一直在努力获得RESTful WCF服务,以接受JSON作为参数并返回一些JSON.

这是我的服务:

    [OperationContract]
    [WebInvoke(
        Method="POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "Authenticate")]
    public AuthResponse Authenticate(AuthRequest data)
    {
        AuthResponse res = new AuthResponse();
        if (data != null)
        {
            Debug.WriteLine(data.TokenId);
            res.TokenId = new Guid(data.TokenId);
        }
        return res;
    }
Run Code Online (Sandbox Code Playgroud)

当我通过{AuthRequest:{TokenId ="some guid"}}时,上面将数据设置为null.

如果我将方法的BodyStyle设置为Bare,那么数据设置正确但我必须从JSON中删除{AuthRequest}(我真的不想这样做).有没有办法让WrappedRequests使用{AuthRequest:{TokenId ="some guid"}作为JSON?

谢谢.

rest wcf json web-services web

10
推荐指数
1
解决办法
1万
查看次数

当BodyStyle = WebMessageBodyStyle.Wrapped时,从C#调用Rest WCF服务操作

我正在使用基于休息的wcf服务,该服务具有我想要使用的操作.BodyStyle的定义设置为WebMessageBodyStyle.Wrapped.

有人可以建议我如何使用.net读取服务的返回值而不进行服务器端更改?

当wcf rest操作将BodyStyle设置为WebMessageBodyStyle.Wrapped时,我可以将响应流从DataContractJsonSerialized函数转换为序列化对象吗?

以下是wcf服务方法的定义

[OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped,RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json,UriTemplate = "CheckStatus/{id}")]
    CurrentStatus CheckStatus(string id);
Run Code Online (Sandbox Code Playgroud)

CurrentStatus数据协定定义为

[DataContract]
public class CurrentStatus
{
    [DataMember(Name = "message")]
    public string message { get; set; }
    [DataMember(Name = "value")]
    public int value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果WebMessageBodyStyle设置为Bare,则如下面的代码所示,则调用按预期工作.如果将WebMessageBodyStyle设置为wrapped,则即使服务器使用预期值进行响应,也始终将消息和值数据队称为空白.通过Web浏览器调用可以看到这一点.

我试图修改这个消费代码来读取包装器内的json内容.

[OperationContract]
    [WebGet(BodyStyle = WebMessageBodyStyle.Bare,RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json,UriTemplate = "CheckStatus/{id}")]
    CurrentStatus CheckStatus(string id);

//Client code Works if server operation contarct BodyStyle=WebMessageBodyStyle.Wrapped
string uri = "http://TestServer/WCF/WCF.svc/CheckStatus/{7}"
byte[] data = proxy.DownloadData(uri);
Stream stream = new …
Run Code Online (Sandbox Code Playgroud)

c# rest wcf web

5
推荐指数
1
解决办法
4499
查看次数

如何修改WCF服务方法的JSON结果的名称

我正在尝试查找有关如何通过ajax调用而不是使用默认包装器来修改从wcf服务以json格式返回给Web客户端的对象名称的信息。我没有运气就搜索了相关文章。似乎结果的默认包装器名称将是MethodNameResult,我希望它是来自多个方法的GenericResponse。

我的合同:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[WcfSerialization::DataContract(Name = "MyServiceResponse")]

public class MyServiceResponse : object
{

    public MyServiceResponse()
    {            
    }

    [WcfSerialization::DataMember(Name = "Success", IsRequired = true, Order = 0)]
    public bool Success { get; set; }

    [WcfSerialization::DataMember(Name = "ErrorMessage", IsRequired = true, Order = 1)]
    public string ErrorMessage { get; set; }  


}
Run Code Online (Sandbox Code Playgroud)

我的界面:

    [OperationContract()]        
    [WebInvoke(Method = "POST", 
        UriTemplate = "MyMethod", 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat=WebMessageFormat.Json
    )]
    MyServiceResponse MyMethod(MyRequest requestData); 

    [OperationContract()]        
    [WebInvoke(Method = "POST", 
        UriTemplate = "MyMethod2", 
        BodyStyle = WebMessageBodyStyle.Wrapped, …
Run Code Online (Sandbox Code Playgroud)

c# asp.net wcf json

4
推荐指数
1
解决办法
2345
查看次数

标签 统计

wcf ×3

c# ×2

json ×2

rest ×2

web ×2

asp.net ×1

web-services ×1