签订合同:
namespace ACME.FooServices
{
[ServiceContract]
public interface IFooService
{
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
FooMessageType Foo(string name);
}
[DataContract]
public class FooMessageType
{
string _name;
string _date;
[DataMember]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember]
public string Date
{
get { return _date; }
set { _date = value; }
}
}
}
并实现:
using System;
using System.ServiceModel.Activation;
namespace ACME.FooServices
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class FooService : IFooService
{
public FooMessageType Foo(string name)
{
string l_name = (String.IsNullOrWhiteSpace(name)) ? "Anonymous" : name;
return new FooMessageType {Name = l_name, Date = DateTime.Now.ToString("MM-dd-yyyy h:mm:ss tt")};
}
}
}
在web.config中配置为:
<system.serviceModel>
<services>
<service name="ACME.FooServices.FooService">
<endpoint address="" behaviorConfiguration="ACME.FooBehaviour" binding="webHttpBinding" contract="ACME.FooServices.IFooService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="ACME.FooBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
我正在尝试通过jQuery从页面调用Foo:
<script type="text/javascript" language="javascript">
$(document).ready(function () {
$("#msgButton").click(function () {
var params = {};
params.name = $("#nameTextbox").val();
$.ajax({
type: 'POST',
url: "http://acme.com/wcfsvc/FooService.svc/Foo",
data: JSON.stringify(params),
contentType: 'application/json; charset=utf-8',
success: function (response, status, xhr) { alert('success: ' + response); },
error: function (xhr, status, error) { alert("Error\n-----\n" + xhr.status + '\n' + xhr.responseText); },
complete: function (jqXHR, status) { alert('Status: ' + status + '\njqXHR: ' + JSON.stringify(jqXHR)); }
});
});
});
</script>
但是我收到一条消息 400-错误的请求 错误,消息为
“服务器在处理请求时遇到错误。异常消息是’在反序列化类型为System.String的对象时发生错误。从名称空间’结束的元素’root’
‘预期。从名称空间找到了元素’name’
。
我想念什么吗?
您params
是对象,它形成{ "name" : "someValue" }
JSON字符串。如果您说的是邮件正文样式,Bare
我认为您的服务期望这样的内容:
[DataContract]
public class SomeDTO
{
[DataMember(Name = "name")]
public string Name { get; set; }
}
因此,您的操作应定义为:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
FooMessageType Foo(SomeDTO data);
如果您希望当前代码正常工作,则应将其更改为:
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
FooMessageType Foo(SomeDTO data);
问题内容: 我知道有很多关于通过JQuery / JSON使用WCF REST的文章,但是我无法使其正常工作。我目前停留在日期参数上。以下是我的C#方法: 以下是我的JavaScript代码: 我的第一个问题是我不断收到日期序列化错误: 它说它不会以开始和结束的方式开始/结束。 我的第二个问题是:我是否必须乘坐枚举数,还是有发送方法? 问题答案: 我拔了很多头发,为此流下了很多眼泪,但这确实可行。
本文向大家介绍wcf WCF中的序列化,包括了wcf WCF中的序列化的使用技巧和注意事项,需要的朋友参考一下 示例 序列化是将对象转换为字节流以存储对象或将其传输到内存,数据库或文件的过程。Microsoft页面序列化 下面的示例演示了WCF中的序列化: [DataContract]属性与类一起使用。在这里,它装饰有Person阶级。 [OperationContract]用于方法。在这里用Ad
本文向大家介绍jQuery ajax调用WCF服务实例,包括了jQuery ajax调用WCF服务实例的使用技巧和注意事项,需要的朋友参考一下 恩,在由瘦客户端转换成胖浏览器端的“潮流”下,必然要使用JavaScript调用后台的各种服务。 屌丝所维护的产品通信都是使用的WCF服务,因此必然要学习这样的内容。借用jQuery强大的库,使用JavaScript访问WCF服务非常简便。同事研究了一个b
我有一个Frankenstein web.config,它是我研究中不断编辑的牺牲品: 最后,我有一个非常简单的HTML文件,它使用Jquery来调用我的服务,托管在一个非本地web服务器上。 试图从我的HTML页面运行jquery,我得到以下结果:preflight的响应具有无效的HTTP状态代码405 如果有人能帮我一丝一毫,那就太神奇了。
本文向大家介绍jQuery Ajax调用WCF服务详细教程,包括了jQuery Ajax调用WCF服务详细教程的使用技巧和注意事项,需要的朋友参考一下 这两天在写基于WCF服务的后台框架,过程中遇到了一些挫折,经过努力全部解决了,在此分享给大家,使用的工具是Visual Studio 2013。 该后台需要支持通过json来传递和接收数据。 首先,说说搭建过程。 第一步:创建WCF服务应用程序项目
我一直在遵循这个例子 使用jQuery创建和使用WCF Restful服务 我收到以下错误: XMLHttp请求无法加载http://localhost:48839/EmployeeService.svc/GetEmployeeDetails/.对预检请求的响应未通过权限改造检查:请求的资源上不存在“访问控制允许起源”标头。因此不允许访问起源“http://localhost:57402”。响应具