标签: wcf-rest

RESTful WCF使用方法名称包装json响应

我是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但结果完全一样.有人能告诉我我错过了什么吗?

wcf json wcf-rest

11
推荐指数
1
解决办法
8637
查看次数

ASP.NET Web Api(REST):使用用户凭据或令牌进行身份验证?保留"注册新用户"资源密码?

我正在尝试使用asp.net web api创建一个休息服务,一切正常,但我现在遇到了如何处理身份验证.

我有点困惑从哪里开始,这是我一直在想的.

我有一个休息api我正在开发包含许多资源,每个资源都需要用户注册,这样做的最佳动作是什么?我是否应该在每次调用服务时在标头中发送用户名和密码,以便我可以使用服务器进行身份验证

AuthorizationFilterAttribute

我应该至少加密它吗?我真的很想知道其他人在做什么,我知道有一个创建令牌的概念(我认为这将是短暂的)因此用户将进行身份验证,然后将收到一个令牌,然后这个令牌将被发送进一步调用该服务.我认为令牌需要短暂存在吗?那么当令牌到期时我该如何处理这个问题呢?

我还有一个用于注册新用户的资源,实际上唯一会调用它的是我的客户端(android,iphone).我应该免费使用任何身份验证方法,或者使用硬编码密码或类似的东西,以便至少没有其他人可以注册新用户?请记住,该服务将在互联网上公开.

我真的很感激任何人对此有任何反馈.

我似乎无法找到正确的方法,我当然希望第一次尝试正确,所以我不必完全重构服务.

提前致谢

asp.net rest wcf-rest asp.net-authentication asp.net-web-api

11
推荐指数
1
解决办法
8341
查看次数

REST WCF服务中的事务

我们正在使用REST WCF服务.我们希望此REST服务上的保存操作处于事务中.有没有办法通过线路将Transaction对象传递给REST WCF服务?

rest wcf transactions wcf-rest

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

wcf restful服务和WEB API之间的区别

我现在很长时间都在查询.我们究竟需要使用WEB API,我们应该在哪里使用WCF restful服务.我们想要在WEB API中实现什么,我们能够在WCF Rest中实现.我试图深入研究答案但我得到了我们需要在wcf中做额外的设置,比如URI模板,合同,端点.但它更多的是设置,但我想知道使用WCF Restful Services背后的真正原因.

wcf-rest asp.net-web-api

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

无法加载类型'System.ServiceModel.Activation.HttpHandler'与WCF REST的版本冲突

我遇到了WCF REST服务的问题.我明白了:

无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.ServiceModel.Activation.HttpHandler'.

在ASP.NET 4.0 AppPool中运行IIS时.

只有在以下情况下才会出现问题:

  • 在IIS内部运行
  • 启用ASP.NET Comaptibility时

在卡西尼号中运行 - 没问题,它可以正常运行.与ASP.NET兼容性运行 - 没问题,它的工作原理.

它似乎是某种处理程序版本冲突试图实例化错误版本的处理程序,而该处理程序反过来试图加载旧版本的System.ServiceModel,但我无法追踪它.

任何人之前都看过这样的事情并有任何想法如何进一步追踪这个?

我查看了ApplicationHost.config和System.ServiceModel和HttpHandler引用的主web.config文件,但没有运气.那里.

+++瑞克---

asp.net wcf wcf-rest

9
推荐指数
3
解决办法
2万
查看次数

在WCF中自定义WebHttp帮助输出

对于具有webHttpBinding和helpEnabled ="true"的服务,将正确生成帮助信息.想知道是否有可能以某种方式控制输出.以下是我想做的更改.

  1. 删除JSON帮助,因为该服务不支持JSON输出.拥有它可能会让用户感到困惑.至少,有一种方法可以输出一条说明不支持JSON的注释.
  2. 对于显示的示例回复,请使用比"字符串内容"更好的示例,其中可以指定实际值样本.如果我可以提供用于序列化的对象作为示例,那将会很好.

wcf wcf-rest

9
推荐指数
1
解决办法
3027
查看次数

在WCF Azure Service Bus中动态分配json响应内容类型

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

c# wcf azure wcf-rest azureservicebus

9
推荐指数
1
解决办法
1182
查看次数

用于WCF REST服务的JSON.NET Serializer

我试图使用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序列化程序不用于序列化对象.

非常感谢任何帮助.

json.net wcf-rest nuget nuget-package wcf-web-api

8
推荐指数
1
解决办法
8004
查看次数

间接连接由Android中的Peer错误重置连接到.NET REST端点

我通过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台设备.

java android wcf-rest

8
推荐指数
1
解决办法
7550
查看次数

如何让用户一次只能从一个设备登录

我有一个RestAPI,当点击验证用户时.这个api暴露给android和ios开发人员他们点击这个api允许用户登录我们的应用程序

我的要求是这个.1)如果用户有手机说带有IMEI"abc1234"的abc电话.他从这部手机登录.现在,如果他试图从他的第二部手机登录,那么他不应该被允许从第二部手机登录.他应该先从abc设备注销.

现在几乎没有并发症1)如果用户从abc登录.退出注销后,他会格式化手机或卸载应用程序.那么我应该如何处理来自同一设备或其他设备的登录.

基本上我想了解这类场景的策略或良好实践.

asp.net iphone android wcf-rest c#-4.0

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