سؤال

لدينا خدمة WCF مع عملاء متعددين لجدولة العمليات بين العملاء. عملت كبيرة على XP. الانتقال إلى Win7، يمكنني فقط توصيل العميل بالخادم على نفس الجهاز. في هذه المرحلة، أفكر في أنه شيء يجب القيام به مع IPv6، لكنني قرن عن كيفية المتابعة.

يعطي العميل الذي يحاول الاتصال بخادم بعيد الاستثناء التالي:

system.servicemodel.endpointnoTfoundException: تعذر الاتصال Net.TCP: //10.7.11.14: 18297 / ZETEC / الخدمة / المجدولشرف / المجدول. استمرت محاولة الاتصال لفترة زمنية من 00: 00: 21.0042014. رمز الخطأ TCP 10060: فشلت محاولة الاتصال لأن الطرف المتصل لا يستجيب بشكل صحيح بعد فترة زمنية، أو فشل الاتصال المحدد لأن المضيف المتصل قد فشل في الاستجابة 10.7.111.14:18297. ---> System.net.sockets.socketException: فشلت محاولة الاتصال لأن الطرف المتصل لا يستجيب بشكل صحيح بعد فترة زمنية، أو فشل الاتصال لأن المضيف المتصل قد فشل في الاستجابة 10.7.111.14:18297

تم تكوين الخدمة مثل ذلك:

<system.serviceModel>
  <services>
     <service
         name="SchedulerService"
         behaviorConfiguration="SchedulerServiceBehavior">
        <host>
           <baseAddresses>
              <add baseAddress="net.tcp://localhost/zetec/Service/SchedulerService"/>
           </baseAddresses>
        </host>
        <endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
                  binding="netTcpBinding"
                  bindingConfiguration = "ConfigBindingNetTcp"
                  contract="IScheduler" />
        <endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
                  binding="netTcpBinding"
                  bindingConfiguration = "ConfigBindingNetTcp"
                  contract="IProcessingNodeControl" />
     </service>
  </services>
  <bindings>
     <netTcpBinding>
        <binding name = "ConfigBindingNetTcp" portSharingEnabled="True">
           <security mode="None"/>
        </binding>
     </netTcpBinding >
  </bindings>

  <behaviors>
     <serviceBehaviors>
        <behavior name="SchedulerServiceBehavior">
           <serviceDebug includeExceptionDetailInFaults="true" />
           <serviceThrottling maxConcurrentSessions="100"/>
        </behavior>
     </serviceBehaviors>
  </behaviors>
</system.serviceModel>

يتصل العميل مثل ذلك:

String endPoint = "net.tcp://" + GetIPV4Address(m_SchedulerHostAddress) + ":" + m_SchedulerHostPort.ToString(CultureInfo.InvariantCulture) + "/zetec/Service/SchedulerService/Scheduler";

NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;

m_Channel = new DuplexChannelFactory<IProcessingNodeControl>(this, binding, endPoint);
m_IProcessingNodeControl = m_Channel.CreateChannel();

لقد راجعت جداري حول عشرات العصر، لكنني أعتقد أنه يمكن أن يكون هناك شيء مفقود. حاول تعطيل جدار حماية ويندوز. حاولت تغيير اللغة المحلي إلى عنوان IPv4 الخاص بي لمحاولة الابتعاد عن IPv6، لقد حاولت إزالة أي كود مضاد لل ipv6.

لا أعرف ما إذا كان ذلك يعني أي شيء، ولكن:

Microsoft Telnet> Open 10.7.11.14 18297
الاتصال ب 10.7.11.14 ... لا يمكن فتح اتصال بالمضيف، على منفذ 18297: فشل الاتصال

لا يبدو أن اختبار Telnet لسوء الحظ هو مفتاح. لقد قمت بنجاح بالتواصل مع منفذ الخدمة الخاص بي من LocalHost وجهاز كمبيوتر بعيد عند تشغيل الخدمة، لكن عميل لا يعمل من الكمبيوتر البعيد.

يبدو أن الاتصال LocalHost غير مضمون دائما. يعمل Desktop (WIN7 / 32) يعمل، الكمبيوتر المحمول (WIN7 / 64) لا يعمل. صناديق Win7 / 64 الأخرى تعمل على الرغم من ذلك. ربما بسبب متعددة NIC على الكمبيوتر المحمول؟ أيضا لا يفسر إخفاقات الاتصال على أنظمة الاختبار.

قمت بإعداد اثنين من آلات Win7 مع تعطيل IPv6 بالكامل (باستخدام 0xFFFFFFFF كما في http://support.microsoft.com/kb/929852. ). لا مساعدة.

هل كانت مفيدة؟

المحلول 2

ليس لدي وقت للعودة واختبر ما إذا كان مزيجا من المساعدة التي تلقيتها من Ligos أم لا، ولكن يبدو أن الإصلاح الأساسي يضيف SMSVCHOST.EXE إلى الاستثناءات الموجودة في جدار حماية Windows.

شكرا جزيلا لمساعدتكم، Ligos. كنت مستعدا للتخلي حتى أجبت على سؤالي.

إرشادات لإضافة net.tcp إلى جدار حماية Windows:

  1. انتقل إلى الخدمات، ابحث عن خدمة مشاركة منفذ Net.TCP، وانقر فوقها نقرة مزدوجة. اسحب المسار القابل للتنفيذ (لا تقلق إذا لم يكن كل شيء على الشاشة، يجب أن يقوم الإجراء Sciping بالتمرير عليه) ونسخه (CTRL-C)
  2. انتقل إلى جدار الحماية الخاص بك وإضافة برنامج جديد يسمح لي بالتواصل من خلال جدار حماية Windows. لصق في الطريق من الخدمات وضرب موافق.

نصائح أخرى

لا يبدو شيء ما عن عنوانك الأساسي المضيف ثم عناوين نقطة النهاية. واحد لديه مرجع ميناء صريح، والآخر لا. عادة عند استخدام عنوان أساسي، يمكنك استخدام عنوان URL النسبي في عنوان نقطة النهاية.

لا أستطيع التفكير في السبب أن هذا سيكون مرتبطا ب IPv6، لأن أيا من رسائل الخطأ تذكر عناوين IPv6.

ربما حاول مرة أخرى بعد تعطيل خيار مشاركة منفذ Net.TCP. بدون مشاركة المنافذ، يجب أن تكون قادرا على تعبئة اتصال باستخدام Telnet مثلك.

أيضا، كيف يتم استضافتك في WIN7؟ في IIS7 أو استضافة ذاتية في خدمة Windows؟ قد يتطلب استضافة ذلك في خدمة بعض الأذونات التي يجب منحها إلى Exe الخاص بك خارج منافذ فتح على جدار الحماية الخاص بك (مثلك في بعض الأحيان عليك القيام به لاستضافة خدمة Windows في HTTP في Win XP).

آسف، أنا في عجلة من امرنا ولا يمكنك البحث عن عناوين URL لهذه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top