3

私はこのチュートリアルに従い、10 ~ 15% の確率で適切に動作するように管理しました。

これは、例外が発生するクライアントのメイン メソッドです。

static void Main(string[] args)
        {
            Console.WriteLine("Client start...");
            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Tcp;

            string serviceNamespace = "nameSpaceFromAzure";
            //Console.Write("Your SAS Key: ");
            string sasKey = "myKeyFromAzure=";//Console.ReadLine();

            Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            TransportClientEndpointBehavior sasCredential = new TransportClientEndpointBehavior();
            sasCredential.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", sasKey);

            ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));

            channelFactory.Endpoint.Behaviors.Add(sasCredential);

            IEchoChannel channel = channelFactory.CreateChannel();
            channel.Open();

            Console.WriteLine("CLIENT-Enter text to echo (or [Enter] to exit):");
            string input = Console.ReadLine();
            while (input != String.Empty)
            {
                try
                {
                    Console.WriteLine("Server echoed: {0}", channel.Echo(input));
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.Message);
                }
                input = Console.ReadLine();
            }

            channel.Close();
            channelFactory.Close();

        }

これが機能する場合があるため、名前空間とキーが正しく入力されていることはわかっています。ただし、ほとんどの場合、この例外が発生します

System.ServiceModel.CommunicationException was unhandled
  HResult=-2146233087
  Message=An error occurred while transmitting data.
  Source=mscorlib
  StackTrace:
    Server stack trace: 
       at Microsoft.ServiceBus.ClientWebSocketConnection.EndRead()
       at Microsoft.ServiceBus.SocketMessageHelper.ReadBytesAsyncResult.ReadComplete(Boolean calledSynchronously)
    Exception rethrown at [0]: 
       at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at Microsoft.ServiceBus.SocketMessageHelper.ReceiveMessageAsyncResult.<>c__DisplayClass12_0.<GetAsyncSteps>b__3(ReceiveMessageAsyncResult thisPtr, IAsyncResult r)
       at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.StepCallback(IAsyncResult result)
    Exception rethrown at [1]: 
       at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.RunSynchronously()
       at Microsoft.ServiceBus.SocketMessageHelper.ReceiveMessage(IConnection connection, TimeSpan timeout)
       at Microsoft.ServiceBus.WebSocketConnectionInitiator.SendRelayedConnectAndReceiveResponse(ClientWebSocketConnection connection, TimeoutHelper timeoutHelper)
       at Microsoft.ServiceBus.WebSocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
       at Microsoft.ServiceBus.ConnectivityModeConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
       at Microsoft.ServiceBus.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
       at Microsoft.ServiceBus.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
       at Microsoft.ServiceBus.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
       at Microsoft.ServiceBus.Channels.LayeredChannel`1.OnOpen(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open()
    Exception rethrown at [2]: 
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at System.ServiceModel.ICommunicationObject.Open()
       at Microsoft.ServiceBus.Samples.Program.Main(String[] args) in C:\Users\xpto\Documents\Visual Studio 2015\Projects\EchoService\EchoClient\Program.cs:line 38
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
       HResult=-2146232800
       Message=More data was expected, but EOF was reached.
       Source=Microsoft.ServiceBus
       StackTrace:
         Server stack trace: 
         Exception rethrown at [0]: 
            at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
            at Microsoft.ServiceBus.ServiceBusClientWebSocket.EndReceive(IAsyncResult result)
            at Microsoft.ServiceBus.ClientWebSocketConnection.EndRead()
       InnerException: 
            HResult=-2146233087
            Message=ServiceBusClientWebSocket was expecting more bytes
            InnerException: 

私は何を間違っていますか?

4

1 に答える 1

1

チュートリアルが「複数のスタートアップ プロジェクト」を示唆していることが判明し、それが動作の原因でした。サービスを起動し、コンソール出力を取得してクライアントを起動すると、すべてが期待どおりに機能しました。

于 2016-11-23T16:01:04.780 に答える