我是RESTful WCF服务的新手,所以请耐心等待.我正在尝试构建一个简单的RESTful WCF服务,该服务返回一个学生列表作为json响应.一切正常,直到我尝试将json字符串转换回客户端上的Student对象列表.
这是我的运营合同:
[OperationContract]
[WebGet(UriTemplate = "Students/", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
public List<Student> FetchStudents()
{
//Fetch and return students list
}
Run Code Online (Sandbox Code Playgroud)
客户代码:
static void Main(string[] args)
{
HttpClient client = new HttpClient("http://localhost/StudentManagementService/StudentManagement.svc/");
response = client.Get("Students/");
response.EnsureStatusIsSuccessful();
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
string str = response.Content.ReadAsString();
List<Student> st = json_serializer.Deserialize<List<Student>>(str);
}
Run Code Online (Sandbox Code Playgroud)
此代码显然失败,因为服务返回的json字符串如下所示:
{"FetchStudentsResult":[{"Course":"BE","Department":"IS","EmailID":"b@gmail.com","ID":1,"Name":"Vinod"}]}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,json响应被包装在FetchStudentsResult中.现在处于调试模式,如果我强行删除这个FetchStudentsResult包装,我的反序列化工作完全正常.
我试过DataContractJsonSerializer但结果完全一样.有人能告诉我我错过了什么吗?
我正在尝试使用asp.net web api创建一个休息服务,一切正常,但我现在遇到了如何处理身份验证.
我有点困惑从哪里开始,这是我一直在想的.
我有一个休息api我正在开发包含许多资源,每个资源都需要用户注册,这样做的最佳动作是什么?我是否应该在每次调用服务时在标头中发送用户名和密码,以便我可以使用服务器进行身份验证
AuthorizationFilterAttribute
我应该至少加密它吗?我真的很想知道其他人在做什么,我知道有一个创建令牌的概念(我认为这将是短暂的)因此用户将进行身份验证,然后将收到一个令牌,然后这个令牌将被发送进一步调用该服务.我认为令牌需要短暂存在吗?那么当令牌到期时我该如何处理这个问题呢?
我还有一个用于注册新用户的资源,实际上唯一会调用它的是我的客户端(android,iphone).我应该免费使用任何身份验证方法,或者使用硬编码密码或类似的东西,以便至少没有其他人可以注册新用户?请记住,该服务将在互联网上公开.
我真的很感激任何人对此有任何反馈.
我似乎无法找到正确的方法,我当然希望第一次尝试正确,所以我不必完全重构服务.
提前致谢
asp.net rest wcf-rest asp.net-authentication asp.net-web-api
我们正在使用REST WCF服务.我们希望此REST服务上的保存操作处于事务中.有没有办法通过线路将Transaction对象传递给REST WCF服务?
我现在很长时间都在查询.我们究竟需要使用WEB API,我们应该在哪里使用WCF restful服务.我们想要在WEB API中实现什么,我们能够在WCF Rest中实现.我试图深入研究答案但我得到了我们需要在wcf中做额外的设置,比如URI模板,合同,端点.但它更多的是设置,但我想知道使用WCF Restful Services背后的真正原因.
我遇到了WCF REST服务的问题.我明白了:
无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.ServiceModel.Activation.HttpHandler'.
在ASP.NET 4.0 AppPool中运行IIS时.
只有在以下情况下才会出现问题:
在卡西尼号中运行 - 没问题,它可以正常运行.与ASP.NET兼容性运行 - 没问题,它的工作原理.
它似乎是某种处理程序版本冲突试图实例化错误版本的处理程序,而该处理程序反过来试图加载旧版本的System.ServiceModel,但我无法追踪它.
任何人之前都看过这样的事情并有任何想法如何进一步追踪这个?
我查看了ApplicationHost.config和System.ServiceModel和HttpHandler引用的主web.config文件,但没有运气.那里.
+++瑞克---
对于具有webHttpBinding和helpEnabled ="true"的服务,将正确生成帮助信息.想知道是否有可能以某种方式控制输出.以下是我想做的更改.
我正在编写一个使用Microsoft.ServiceBus.dll 1.0.0.0(.NET 3.5版本)的POC应用程序.
我的WCF合同和服务如下所示:
[ServiceContract(Name="MyServiceContract", Namespace = "http://mydomain.com/")]
internal interface IServiceContract
{
[WebInvoke(Method = "POST", UriTemplate = "/DoOperation")]
[OperationContract]
Stream RelayRequest(Stream requestBody);
}
[ServiceBehavior(Name = "Service1", Namespace = "http://mydomain.com/Service1/", InstanceContextMode = InstanceContextMode.Single)]
internal class Service1 : IServiceContract
{
Stream RelayRequest(Stream requestBody)
{
var contents = GetJsonResponse();
var responseStream = new MemoryStream();
var streamWriter = new StreamWriter(responseStream);
streamWriter.AutoFlush = true;
var writer = new JsonTextWriter(streamWriter);
var serializer = new JsonSerializer();
serializer.Serialize(responseStream, contents);
responseStream.Position = 0 // reset the position of the …Run Code Online (Sandbox Code Playgroud) 我试图使用NETFx Json.NET MediaTypeFormatter nuget包在我的WCF REST服务(4.0框架)中交换默认的DataContractJsonSerializer.我在我的项目中下载了包,并在Global.asax文件中添加了以下代码行.
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes();
// Create Json.Net formatter serializing DateTime using the ISO 8601 format
var serializerSettings = new JsonSerializerSettings();
serializerSettings.Converters.Add(new IsoDateTimeConverter());
var config = HttpHostConfiguration.Create();
config.Configuration.OperationHandlerFactory.Formatters.Clear();
config.Configuration.OperationHandlerFactory.Formatters.Insert(0, new JsonNetMediaTypeFormatter(serializerSettings));
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行该服务时,它仍然使用DataContractJsonSerilizer进行序列化.以下是我从我的服务中返回的课程.
[DataContract]
public class SampleItem
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string StringValue { get; set; }
[DataMember]
public DateTime DateTime { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下是Fiddler服务的回复.

您可以看到DateTime不是我在上面代码中的serializerSettings中指定的ISO格式.这告诉我JSON.NET序列化程序不用于序列化对象.
非常感谢任何帮助.
我通过SSL连接到IIS REST服务的设备出现间歇性错误.我的应用程序运行正常,但有时我得到这个例外.它处理得很好,并没有降低应用程序..
我想知道这意味着什么,有没有办法解决它?目前,它会导致数据检索延迟.此外,它泛滥日志,我不能真的忽略它..我想知道我是否可以改善这种情况.
当我处理REST服务时,这是我应该期待的吗?我的服务器在Amazon EC2上.
读取错误:ssl = 0x1211a88:系统调用期间的I/O错误,通过对等方重置连接
javax.net.ssl.SSLException:读取错误:ssl = 0x1211a88:系统调用期间的I/O错误,在org处的org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_read(本机方法)中由对等方重置连接.位于org.apache.harmony.xnet.provider.jsse的libcore.io.Streams.readSingleByte(Streams.java:41)上的apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLInputStream.read(OpenSSLSocketImpl.java:671).位于libcore.net.http的libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:544)上的libcore.io.Streams.readAsciiLine(Streams.java:201)中的OpenSSLSocketImpl $ SSLInputStream.read(OpenSSLSocketImpl.java:655) .httpEngine.readResponse(HttpEngine.java:784)位于libcore.net的libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)libcore.net.http.HttpURLConnectionImpl.getResponseMessage(HttpURLConnectionImpl.java:475). http.HttpsURLConnectionImpl.getResponseMessage
这不是我可以重现的东西.没有权限或像这样的东西.这是间歇性的问题.我每天看到大约有1000台设备连接每分钟200台设备.
我有一个RestAPI,当点击验证用户时.这个api暴露给android和ios开发人员他们点击这个api允许用户登录我们的应用程序
我的要求是这个.1)如果用户有手机说带有IMEI"abc1234"的abc电话.他从这部手机登录.现在,如果他试图从他的第二部手机登录,那么他不应该被允许从第二部手机登录.他应该先从abc设备注销.
现在几乎没有并发症1)如果用户从abc登录.退出注销后,他会格式化手机或卸载应用程序.那么我应该如何处理来自同一设备或其他设备的登录.
基本上我想了解这类场景的策略或良好实践.