如何使用 c# 在 asp.net 中为服务器端编写启用 JSON 的 WCF 服务

发布于 2024-11-06 08:01:09 字数 87 浏览 0 评论 0 原文

我有一个 Android 和 iphone 客户端...我需要用 c# 编写服务器端启用 JSON 的 WCF 服务。如何创建启用 JSON 的 WCF 服务?

I have a client in Android and iphone...I need to write server side JSON Enabled WCF service with c#. How to create JSON Enabled WCF service?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

箹锭⒈辈孓 2024-11-13 08:01:09

编写支持 JSON 的内容与标准 WCF 并没有太大区别。我猜你想要一个 REST API(我的 Android WCF 服务使用 REST),这意味着你的调用是 GET 请求而不是 HTTP posts,使用 URL 作为传递参数的方式:

http://example.rest.com/myservice/categories/en/videos

其中“en”和“videos”将是您想要使用的参数你的网址。

WCF 基于接口工作,该接口定义了服务契约。对于 REST 服务,您可以指定 JSON / URL 格式如下:

[ServiceContract()] // Required: this is a WCF endpoint
public interface IMyService
{
     [OperationContract()] // Required so the method actually is included
     [WebGet(
          ResponseFormat = WebMessageFormat.Json, // Return results as JSON
          UriTemplate = "/categories/{language}/{category}")]
     CategoryResponse Find(string language, string category);
}

URI 模板类别形成您的 URI 结构,表示当有人点击您的服务时,用“类别”然后用斜杠分隔的两个值,它将调用此 Find 方法,将第一个参数作为语言参数传递,类别参数将等于第二个:

例如:http://yourdomain/yourservice.svc/categories/it/bob

将调用此方法,传递“it”作为语言,“bob”作为类别。

返回对象只是一个标准数据契约,如果您想控制格式,只需使用 DataContract + DataMember 属性(具有名称、命名空间、顺序等命名参数)。

然后最后一部分就是正确配置您的服务,在本例中

a) 定义 webHttp 服务行为:

<behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>          
        </behavior>        
      </endpointBehaviors>

和 b) 使用 webHttpBinding 定义您的端点(并使用上面定义的端点行为:请参阅我们设置 BehaviourConfiguration = "web"):

    <services>     
          <service behaviorConfiguration="standard"
 name="Your.Implementing.ClassThatImplementsIMyService">
            <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding"
                      contract="Namespace.To.IMyService" />
          </service>
        </services>

和基本上就是这样...

there's not a whole lot of difference in writing JSON enabled stuff vs standard WCF. I'm guessing you want a REST API (my WCF services for android worked REST), which means your calls are GET requests as opposed to HTTP posts, using the URL as a way of passing parameters:

http://example.rest.com/myservice/categories/en/videos

where "en" and "videos" would be the parameters you wanted to use on your URL.

WCF works off an interface, the interface defines the service contract. For REST services, you can specify the JSON / URL format as below:

[ServiceContract()] // Required: this is a WCF endpoint
public interface IMyService
{
     [OperationContract()] // Required so the method actually is included
     [WebGet(
          ResponseFormat = WebMessageFormat.Json, // Return results as JSON
          UriTemplate = "/categories/{language}/{category}")]
     CategoryResponse Find(string language, string category);
}

The URI template category forms your URI structure, saying that when somebody hits your service, with a "categories" then two values separated by slashes, it will call this Find method, passing the first parameter as the language parameter and the category parameter will equal the second:

e.g: http://yourdomain/yourservice.svc/categories/it/bob

will call this method, passing "it" as language, and "bob" as category.

The return object is just a standard datacontract, if you want to control the format just use the DataContract + DataMember attributes (have named parameters like name, namespace, order etc).

Then the final part is just to configure your service properly, in this case

a) define webHttp service behavior:

<behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>          
        </behavior>        
      </endpointBehaviors>

and b) define your endpoint using webHttpBinding (and using the endpoint behaviour defined above: see we set behaviourConfiguration = "web"):

    <services>     
          <service behaviorConfiguration="standard"
 name="Your.Implementing.ClassThatImplementsIMyService">
            <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding"
                      contract="Namespace.To.IMyService" />
          </service>
        </services>

and that's basically it...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文