此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
操作方法:创建可访问 Service Bus 的基于 REST 的服务

操作方法:创建可访问 Service Bus 的基于 REST 的服务

更新时间: 2015年5月

Service Bus 目前支持有资格作为基于 REST 的服务的应用程序:一种遵循 Web 编程模型的传统 Service Bus 应用程序。这种样式的应用程序使用基本 Windows Communication Foundation (WCF) 编程模型:定义和创建服务约定、使用绑定和安全凭据连接到 Service Bus,等等。主要的添加项是,基于 REST 的Service Bus应用程序会使用服务约定,而系统会将 [OperationContract, WebGet][OperationContract, WebInvoke] 属性应用到该约定的成员中。这些行为将接口定义为 REST 接口,并允许 Service Bus 与其他 REST 样式的应用程序交互。因此,应用程序包含额外的代码,利用该代码,应用程序就能够构建 HTTP 样式的消息。最后,所有这些应用程序均使用 WebHttpRelayBinding 绑定。有关详细信息,请参阅 TechNet 上的 操作方法:通过 Service Bus 公开基于 REST 的 Web 服务。有关基于 REST 的服务应用程序的示例,请参阅 Service Bus REST 教程,后者又基于 WebHttp Service Bus 示例。

托管基于 REST 的Service Bus应用程序的过程与托管标准Service Bus应用程序的过程非常类似。主要的不同在于约定和配置:实际的托管进程基本上是相同的。

  1. 使用为 Service Bus 构建服务中定义的标准模式创建服务;即,定义并实现服务约定、配置并实现服务主机,等等。

    1. OperationContractAttribute 属性应用于服务约定时,请确保已应用相关属性来标识基于 REST 的成员。有关详细信息,请参阅 TechNet 上的如何操作方法:通过 Service Bus 公开基于 REST 的 Web 服务.

      以下示例代码显示了如何将接口成员标记为 REST 样式的 GET 成员。

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. 实现约定时,请根据应用程序的需求,为传出 Web 响应设置适当的内容类型标头。

      public ImageService() 
      {
          this.bitmap = Image.FromFile(imageFileName);
      }
      
      public Stream GetImage()
      {
          MemoryStream stream = new MemoryStream();
          this.bitmap.Save(stream, ImageFormat.Jpeg);
      
          stream.Position = 0;
          WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
      
          return stream;
      }        
      
      
      
  2. 使用 CreateServiceUri 方法创建服务的地址:

    string serviceNamespace = “myServiceNamespace”
    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    
    
  3. 创建 WebServiceHost 的新实例。

    WebServiceHost host = new WebServiceHost(typeof(ImageService), address);
    

    WebServiceHost 类从 ServiceHost 类派生,是对 WCF Web 编程模型的补充。它还简化了基于 REST 的服务的托管方式。建议你在基于 REST 的Service Bus应用程序实现中使用 WebServiceHost,而不是 ServiceHost。有关详细信息,请参阅 TechNet 上的 WCF 文档中的 WCF REST 编程模型

  4. 指定服务终结点所使用的地址、绑定和约定(也称为“ABC”)。

        <services>
          <!-- Application Service -->
          <service name="Microsoft.ServiceBus.Samples.ImageService"
                   behaviorConfiguration="default">
            <endpoint name="RelayEndpoint"
                      contract="Microsoft.ServiceBus.Samples.IImageContract"
                      binding="webHttpRelayBinding"
                      bindingConfiguration="default"
                      behaviorConfiguration="sharedAccessSignatureClientCredentials"
                      address="" />
        </service>
    

    在这里,ABC 将链接到 App.config 文件中的终结点。有关配置应用程序的详细信息,请参阅配置 WCF 服务以注册到 Service Bus

    在基于 REST 的Service Bus应用程序中,适用于服务终结点的唯一绑定是 WebHttpRelayBinding

  5. 如有必要,请禁用客户端身份验证。

    
        <bindings>
          <!-- Application Binding -->
          <webHttpRelayBinding>
            <binding name="default">
                 <security relayClientAuthenticationType="None" />
            </binding>
          </webHttpRelayBinding>
        </bindings>
    
    

    默认情况下,WebHttpRelayBinding 绑定需要客户端身份验证。此步骤介绍如何在 App.config 文件中使用 <binding> 元素禁用客户端身份验证,使客户端在特定情况下(例如,当你使用浏览器时)不必提供凭据。有关使用 Service Bus 进行身份验证的详细信息,请参阅保护和验证 Service Bus 连接

  6. 定义应用程序的安全性:

        <behaviors>
          <endpointBehaviors>
            <behavior name="sharedAccessSignatureClientCredentials">
              <transportClientEndpointBehavior>
                <tokenProvider>
                  <sharedAccessSignature keyName=”RootManageSharedAccessKey” key="**key**" />
                </tokenProvider>
              </transportClientEndpointBehavior>
            </behavior>
          </endpointBehaviors>
        </behaviors>
    

    在此示例中,安全性是在 App.config 文件中定义的。有关安全性的详细信息,请参阅保护和验证 Service Bus 连接

  7. 通过调用 WebServiceHost.Open 打开服务:

    host.Open()
    
  8. 完成后,使用 WebServiceHost.Close 关闭托管。

    host.Close();
    

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft