Azure Service Bus主题超时异常

时间:2015-05-13 20:03:45

标签: c# wcf azure servicebus

我正在使用此博客文章中提供的代码构建Azure Service Bus主题的POC:http://blogs.msdn.com/b/tomholl/archive/2011/10/09/using-service-bus-topics-and-subscriptions-with-wcf.aspx但是,我收到以下错误。

  

System.TimeoutException:请求在00:00:00毫秒后超时。无法确定请求的成功完成。应进行其他查询以确定操作是否成功。

我按照链接做了一切。这是我的代码,我在这一行收到错误:((IChannel)clientChannerl).Open();

        var accountEventLog = new AccountEventLog()
        {
            AccountId = 123,
            EventType = "BE",
            Date = DateTime.Now
        };

        ChannelFactory<IAccountEventNotification> factory = null;
        try
        {
            factory = new ChannelFactory<IAccountEventNotification>("Subscribers");
            var clientChannerl = factory.CreateChannel();
            ((IChannel)clientChannerl).Open();

            using (new OperationContextScope((IContextChannel)clientChannerl))
            {
                var bmp = new BrokeredMessageProperty();
                bmp.Properties["AccountId"] = accountEventLog.AccountId;
                bmp.Properties["EventType"] = accountEventLog.EventType;
                bmp.Properties["Date"] = accountEventLog.Date;
                OperationContext.Current.OutgoingMessageProperties.Add(BrokeredMessageProperty.Name, bmp);

                clientChannerl.onEventOccurred(accountEventLog);
            }

            ((IChannel)clientChannerl).Close();
            factory.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

这是我的配置设置

    <behaviors>
      <endpointBehaviors>
        <behavior name="securityBehavior">
          <transportClientEndpointBehavior>
            <tokenProvider>
              <sharedSecret issuerName="RootManageSharedAccessKey" issuerSecret="Shared Key Here" />
            </tokenProvider>
          </transportClientEndpointBehavior>
        </behavior>
      </endpointBehaviors>
    </behaviors>      
    <bindings>
      <netMessagingBinding>
        <binding name="messagingBinding" sendTimeout="00:03:00" receiveTimeout="00:03:00"
                  openTimeout="00:03:00" closeTimeout="00:03:00" sessionIdleTimeout="00:01:00"
                  prefetchCount="-1">
          <transportSettings batchFlushInterval="00:00:01" />
        </binding>
      </netMessagingBinding>
    </bindings>
    <client>
      <endpoint name="Subscribers"
                address="sb://Namespace/topicname"
                binding="netMessagingBinding"
                bindingConfiguration="messagingBinding"
                contract="My Contract"
                behaviorConfiguration="securityBehavior" />
    </client>

任何帮助都将受到高度赞赏

2 个答案:

答案 0 :(得分:1)

我能够解决这个问题。但是,我将描述我在整个练习中学到的东西。

  1. 行为中添加的令牌提供程序用于ACS(Active Directory服务)的服务总线身份验证
  2. 使用Azure门创建的命名空间默认情况下不会创建ACS端点/ ACS身份验证。创建命名空间时,默认情况下仅创建SAS(共享访问签名)。
  3. 要使用SAS验证您的wcf呼叫,请使用此令牌提供程序:&lt; sharedAccessSignature keyName =&#34; RootManageSharedAccessKey&#34;键=&#34;的&#34; /&GT;
  4. 如果您要使用ACS身份验证,请使用Azure Power Shell创建命名空间。以下是创建启用了ACS身份验证的命名空间的PS命令:

    New-AzureSBNamespace&#34; Namespace&#34; &#34;美国东部&#34; -CreateACSNamespace $ true -NamespaceType Messaging

  5. 因此,为了解决我的问题,我使用了上述的Point 3,它开始工作。

答案 1 :(得分:0)

需要注意的另一件事是,有人在App.config或Web.config中意外地启用了代理吗?发送时会产生类似的异常。

寻找以下内容:

  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="true">
      <proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
    </defaultProxy>
  </system.net>