我一直在努力获得RESTful WCF服务,以接受JSON作为参数并返回一些JSON.
这是我的服务:
Run Code Online (Sandbox Code Playgroud)[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; }
当我通过{AuthRequest:{TokenId ="some guid"}}时,上面将数据设置为null.
如果我将方法的BodyStyle设置为Bare,那么数据设置正确但我必须从JSON中删除{AuthRequest}(我真的不想这样做).有没有办法让WrappedRequests使用{AuthRequest:{TokenId ="some guid"}作为JSON?
谢谢.
我正在使用基于休息的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) 我正在尝试查找有关如何通过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)