netTcpRelayBinding Служба WCF, размещенная в службе Windows - стандартные методы

Я пишу службу WCF netTcpRelayBinding, размещенную в службе Windows. Мне кажется, что мой код наивен из-за отсутствия опыта разработки служб Windows. Это вызывается из Windows-Azure. Не могли бы вы помочь мне просмотреть код и то, как я могу его импровизировать: - мы используем NLOG для регистрации.

Моя служба выдает исключение (упомянуто в конце вопроса).

Как мне: - 1. Определить зависимость службы Windows (должна ли она запускаться до того, как машина подключится к Интернету). 2. Как должно быть больше отказоустойчивости, как можно запустить через какой-то промежуток времени.

namespace XYC.Service.WinServiceHost
    {
        public partial class XYCService : ServiceBase
        {
            private ServiceHost serviceHost = null;
            private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
            public One23InsightService()
            {
                // Name the Windows Service
                ServiceName = "XYCService ";
                const string logName = "Application";
                InitializeComponent();
                if (!System.Diagnostics.EventLog.SourceExists(ServiceName))
                {
                    System.Diagnostics.EventLog.CreateEventSource(ServiceName, logName);
                }
                EnLog.Source = ServiceName;
                EnLog.Log = logName;
            }

            protected override void OnStart(string[] args)
            {
                if (serviceHost != null)
                {
                    serviceHost.Close();
                }
                EnLog.WriteEntry(ServiceName + " Inside OnStart...");
                try
                {
                   serviceHost = new ServiceHost(typeof(InsightSrcDataService));

                    serviceHost.Faulted += HostFaulted;
                    serviceHost.UnknownMessageReceived += HostUnknownMessageReceived;

                    serviceHost.Open();
                    LogServiceInfo(serviceHost);
                    if (serviceHost.State != CommunicationState.Faulted)
                    {
                        EnLog.WriteEntry(ServiceName + " started successfully.");
                        EnLog.WriteEntry(ServiceName + " Automapping of entities are done successfully.");
                    }
                }
                catch (Exception ex)
                {
                    string msg = ServiceName + " failed to start. Exception Message:-" + ex.Message + (ex.InnerException != null ? ex.InnerException.Message : string.Empty);
                    EnLog.WriteEntry(msg);
                    Logger.LogException(NLog.LogLevel.Error, msg, ex);
                }
            }

            private void LogServiceInfo(ServiceHost host)
            {
                EnLog.WriteEntry(host.Description.ServiceType + "is up and running with these endpoints :");
                foreach (ServiceEndpoint se in host.Description.Endpoints)
                {
                    EnLog.WriteEntry(se.Address.ToString());
                }
            }

            private void HostUnknownMessageReceived(object sender, UnknownMessageReceivedEventArgs e)
            {
                EnLog.WriteEntry(ServiceName + " Inside UnknownMessageReceived.");
            }

            private void HostFaulted(object sender, EventArgs e)
            {
                EnLog.WriteEntry(ServiceName + " - Host Faulted.");
            }

            protected override void OnStop()
            {
                if (serviceHost == null) return;
                serviceHost.Close();
                serviceHost = null;
            }
        }
    }

Configuration

 <system.serviceModel>
    <services>
      <service name="XYC.Service.WCFNetTCPContract.DataService">
        <endpoint
          name="SrcWeb"
          address="sb://data.servicebus.windows.net/App/long-guid"
                  binding="netTcpRelayBinding"
                  contract="XYC.Service.Interface.IService"
                  bindingConfiguration="Hybrid"
                  behaviorConfiguration="sbTokenProvider" />

        <endpoint
          name="AdminServiceEndpoint"
          address="sb://serviceaddress.servicebus.windows.net/Admin/long-guid"
                  binding="netTcpRelayBinding"
                  contract="One234C.Service.AdminInterface.IOne23AdminService"
                  bindingConfiguration="Hybrid"
                  behaviorConfiguration="sbTokenProvider" />
      </service>
    </services>
    <bindings>
      <netTcpRelayBinding>
        <binding name="Hybrid" connectionMode="Hybrid" maxReceivedMessageSize="500000">
          <security mode="None" />
        </binding>
      </netTcpRelayBinding>
    </bindings>
    <behaviors>

      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="False" httpsGetEnabled="False" />
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="sbTokenProvider">
          <transportClientEndpointBehavior>
            <tokenProvider>
              <sharedSecret issuerName="owner" issuerSecret="xyc" />
            </tokenProvider>
          </transportClientEndpointBehavior>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <extensions>   
    </extensions>
  </system.serviceModel>

Это иногда вызывает следующее исключение (я предполагаю, что ему не хватает зависимости службы Windows, я хочу, чтобы эта служба запускалась после того, как машина подключилась к Интернету и запущена служба сервера sql).

  1. System.TimeoutException: операция открытия не была завершена в течение отведенного тайм-аута 00:00:00. Время, отведенное для этой операции, могло быть частью более длительного тайм-аута. ---> System.TimeoutException: время ожидания истекло после 00:00:00 при установке транспортного сеанса на net.tcp: //xxx.servicebus.windows.net: 9351 / Src / guid /. Время, отведенное для этой операции, могло быть частью более длительного тайм-аута. ---> System.TimeoutException: подключение к через net.tcp: //xxx.servicebus.windows.net: 9351 / Src / guid / истекло время ожидания после 00:00:00. Были предприняты попытки подключения к 0 из 1 доступного адреса (). Проверьте RemoteAddress своего канала и убедитесь, что записи DNS для этой конечной точки соответствуют действительным IP-адресам. Время, отведенное для этой операции, могло быть частью более длительного тайм-аута. в System.ServiceModel.Channels.SocketConnectionInitiator.CreateTimeoutException (Uri uri, тайм-аут TimeSpan, адреса IPAddress [], Int32 invalidAddressCount, SocketException innerException) в
  2. System.ArgumentException: IssueerSecret недействителен. Имя параметра: IssuerSecret в Microsoft.ServiceBus.SharedSecretTokenProvider.DecodeSecret (String IssueerSecret) в Microsoft.ServiceBus.SharedSecretTokenProvider..ctor (String IssuerName, String IssuerSecret) в Microsoft.ServiceBus.Configuration.TokenProviderTokenProvider .TransportClientEndpointBehaviorElement.CreateBehavior () в System.ServiceModel.Description.ConfigLoader.LoadBehaviors [T] (ServiceModelExtensionCollectionElement1 behaviorElement, KeyedByTypeCollection1 поведения, логическое описание commonBehaviors, ServiceDescriptionDescriptionElement1 behaviorElement, KeyedByTypeCollection1, описание_дисциплины_обслуживания) в System.ServiceDescriptionDescriptionDescription.дис. , Boolean skipHost) в System.ServiceModel.ServiceHostBase.LoadConfigurationSectionInternal (ConfigLoader configLoader, описание ServiceDescription, ServiceElement serviceSection) в System.ServiceModel.ServiceHost.ApplyConfiguration () в System.ServiceModel.Serv iceHostBase.

person Anand    schedule 07.02.2013    source источник


Ответы (2)


Вторая ошибка означает, что ключ эмитента для используемого вами пространства имен неверен. Возможно, вам потребуется проверить, используете ли вы правильный ключ.

person TheDude    schedule 07.02.2013

Похоже на ошибку в реализации привязки NetTCPRelaybinding. У меня такая же проблема. Я ретранслирую раздел служебной шины, я вижу отображаемую службу, но тип реле - Нет.

person Umang    schedule 08.07.2016