Azure AppFabric客户端

时间:2010-12-22 11:33:16

标签: wcf azure appfabric

我已经在这2天里一直在努力,但我仍然无法让它发挥作用。

我要加入一个图表流程来解决我的问题,以便我的问题更加清晰: Google Docs PNG

以下是整体问题:

我在Windows Azure上部署了一个简单的WCF服务,我可以毫无问题地访问它。现在,我确实希望通过ServiceBus(即AppFabric)访问这个相同的服务,这就是我遇到的问题。我在appfabric上创建了一个名称空间,设置了一个包含5个连接的包,然后我开始了!

这是我的servicedefinition(csdef)文件:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CRM5_WP7_GW"     xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WCFGWServiceWebRole">
<Sites>
  <Site name="Web">
    <Bindings>
      <Binding name="Endpoint1" endpointName="Endpoint1" />
    </Bindings>
  </Site>
</Sites>
<Endpoints>
  <InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
  <Import moduleName="Diagnostics" />
</Imports>
<LocalResources>
  <LocalStorage name="WCFServiceWebRole1.svclog" sizeInMB="1000" cleanOnRoleRecycle="false" />
</LocalResources>

然后,这是我的serviceconfiguration(cscfg)文件:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="CRM5_WP7_GW" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
  <Role name="WCFGWServiceWebRole">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

现在最后一部分:我的控制台应用程序(客户端):

namespace CRM5WP7HARDCLIENT
 {
  class Program
  {
   static void Main(string[] args)
   {

// create the service URI based on the service namespace
Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("https", "myNameSpace", "myServiceName");

// create the credentials object for the endpoint
TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;
sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = "issuerName";
sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = "issuerSecret";

// create the channel factory loading the configuration

ServiceEndpoint sep = new ServiceEndpoint(ContractDescription.GetContract(typeof(IGWService)));
sep.Address = new EndpointAddress(serviceUri);
sep.Binding = new NetTcpRelayBinding();
sep.Binding = new BasicHttpRelayBinding();
ChannelFactory<IGWService> channelFactory = new ChannelFactory<IGWService>(sep);

// apply the Service Bus credentials
channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);


// create and open the client channel
IGWService channel = channelFactory.CreateChannel();
System.Console.WriteLine("Opening channel..." + serviceUri.ToString());
((ICommunicationObject)channel).Open();
System.Console.WriteLine("Calling operation...");
System.Console.WriteLine(channel.HelloWorld());
System.Console.WriteLine("Done...");
System.Console.ReadKey();

((ICommunicationObject)channel).Close();
channelFactory.Close();
   }
  }
 }

您可以注意到,我的服务有一个简单的问候世界。 我的控制台应用程序显示“在指定位置没有托管服务”..

我已经尝试过更改URI,尝试多次使用配置,然后我最终使用现在的那个但是我的努力破产了^ _ ^

如果你们有任何想法,那就太棒了:)

提前感谢您的建议和指示

干杯 米卢德B

1 个答案:

答案 0 :(得分:1)

您的服务主机是否在Azure Web角色中?如果是这样,问题可能是除非从外部“激活”,否则WCF服务永远不会创建到服务总线的出站连接。当向服务发出请求时,此激活通常由IIS完成。但是当使用服务总线时,服务主机需要主动启动该项目。

您可以参考此博客文章:http://www.wadewegner.com/2010/05/host-wcf-services-in-iis-with-service-bus-endpoints/