سؤال

أنا قادر على الاتصال بخدمة الويب الخاصة ببائع الطرف الثالث من برنامج نموذج Windows على ما يرام. عندما أحاول الاتصال بنفس خدمة الويب وطريقة الويب ونفس عنوان URL من خدمة الويب WCF ، أحصل على الخطأ التالي:

ExportValuationPolicyNumber:Exception=System.Net.WebException: Unable to connect to the remote server ---> 
System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly 
respond after a period of time, or established connection failed 
because connected host has failed to respond 66.77.241.76:80

   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetRequestStream()
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at TFBIC.RCT.WCFWebServices.ExpressLync.ValuationServiceWse.ExportValuationPolicyNumber(String PolicyNumber) in c:\Source\TFBIC.RCT.WCFWebServices\TFBIC.RCT.WCFWebServices\Web References\ExpressLync\Reference.cs:line 519
   at TFBIC.RCT.WCFWebServices.ValuationService.ExportValuationPolicyNumber(String PolicyNumber) in c:\Source\TFBIC.RCT.WCFWebServices\TFBIC.RCT.WCFWebServices\ValuationService.svc.cs:line 97

أحاول أساسًا كتابة غلاف WCF للبائع. دعونا لا نتخلص من النقطة - لكن Microsoft تقول إن WCF يمكنه الاتصال بـ WSE3 ، ولكن فقط مع تشغيل SSL ، وبائعتي - صدق أو لا تصدق - لا يسمح اتصال SSL. لذا ، علقت كتابة الغلاف حتى أتمكن من الاتصال من BizTalk 2009. الآن ، أنا أختبر Wrapper عبر برنامج وحدة التحكم.

ماذا يمكنني حتى أن أفعل لتصحيح؟ لقد أضفت آثار eventlog قبل وبعد خدمة WCF حيث تستدعي خدمة .asmx - لذلك أعلم أن هذا هو المكان الذي تهب فيه (بالإضافة إلى رقم السطر في الخطأ أعلاه).

لدي ما يلي في web.config:

<microsoft.web.services3>
        <diagnostics>
                <trace enabled="true" 
                           input="c:\inetpub\wwwroot\wsetraces\InputTrace.webinfo" 
                           output="c:\inetpub\wwwroot\wsetraces\OutputTrace.webinfo" />
                <detailedErrors enabled="true" />
        </diagnostics>
</microsoft.web.services3>

وقد أعطيت الدليل الوصول الكامل للجميع - ومع ذلك لا يظهر أي أثر هناك.

ما هي بعض الأشياء التي يمكنني البحث عنها أو أجربها بجوار تصحيح هذا؟

من الناحية النظرية ، يجب ألا تكون نتائج "ping" مهمة ، لأن موقع الويب يعمل من برنامج Form Windows الذي يطلق عليه جيدًا.

ومع ذلك - إليك ما يظهره بينغ ويبدو مشكوك فيه قليلاً بالنسبة لي:

C: user uxnxw01> ping rct.msbexpress.net

Pinging rct.msbexpress.net [66.77.241.56] with 32 bytes of data:
Reply from 10.193.99.5: Destination net unreachable.
Reply from 10.193.99.5: Destination net unreachable.
Request timed out.
Reply from 10.193.99.5: Destination net unreachable.

Ping statistics for 66.77.241.56:
    Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),

شكرًا،

نيل والترز


تحليل wireshark

قمت بتشغيل Wireshark - نشرت بعض النتائج في التعليق أدناه. ومع ذلك ، بعد قراءته أكثر ، لا يقول دائمًا "الوجهة التي لا يمكن الوصول إليها". لكن في حالة فشلها ، لا أحصل على أي قاعدة بيانات. ما زلت في حيرة من أمري ما يجب القيام به بعد ذلك. لقد قمت بمقارنة الحزم لكنها بطيئة ومربكة. على سبيل المثال ، ما زلت لم أجد المفتاح (policynum محدد) أنني أعمر في حزمة الطلب. أرى أيضًا بعض عبارات "الوجهة التي لا يمكن الوصول إليها" في تلك التي نجحت.

في الشخص الذي يعمل ، لا أرى 66.77.241.76 ، أرى فقط وكيل شركتنا. لكن لا يمكنني رؤية أي شيء في التكوين (أو الكود) من شأنه أن يخبر WSE3 باستخدام الوكيل أو عدم استخدامه.


نتائج Telnet:

C:\Users\uxnxw01>telnet 66.77.241.56 80
Connecting To 66.77.241.56...Could not open connection to the host, on port 80:
Connect failed

C:\Users\uxnxw01>telnet 66.77.241.76 80
Connecting To 66.77.241.76...Could not open connection to the host, on port 80:
Connect failed

لست متأكدًا مما يثبته هذا. كما قلت ، يمكنني بالتأكيد الاتصال بنفس خدمة الويب من نموذج Windows عن طريق استدعاء واجهة WSE3 مباشرة. أعلم أنه يمكنني الوصول إلى هناك بهذه الطريقة.

أفكر في أن الاختلافات الرئيسية في البرنامجين هي أن المرء يعمل تحت نموذج فوز ويدعو WSE3 مباشرة. هذا واحد يعمل. الرمز نفسه هو 99 ٪ من الكود ، الذي يتم نشره كخدمة WCF ، لذلك يتم تشغيله تحت IIS (ثم يقوم برنامج وحدة التحكم بالاتصال بخدمة WCF/IIS على جهاز My Machine ، والذي يدعو بدوره إلى خدمة WSE3).

هل هناك سبب ما لن يستخدمه IIS نفس الوكيل؟

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

المحلول

شكرا لجميع المساعدة أعلاه - ولكن ها هي الإجابة الحقيقية:

valservice.proxy = new system.net.webproxy ("http: //10.192.xx.xx: 8080"، حقيقي)؛

يبدو أن خدمة WCF التي تعمل تحت IIS لا تستخدم نفس الوكيل ، لذلك قمت بتعيينها يدويًا في الكود. سأقوم بنشر سؤال آخر لمعرفة ما إذا كان هناك طريقة للقيام بذلك في ملف التكوين.

نصائح أخرى

قد ترغب في استخدام Wireshark لمعرفة ما يجري مع حركة مرور الشبكة.

قد يتم تعطيل طلبات Ping (حزم ICMP) على جدار الحماية. لذلك من الممكن تمامًا عدم استعادة استجابة بينغ ، بينما تتمكن من الوصول إلى الصندوق على منافذ مختلفة.

حاول واستخدام telnet للاتصال بـ 66.77.241.56 على المنفذ 80 ومعرفة ما إذا كنت قد حصلت على رد.

telnet 66.77.241.56 80

بدلا من ذلك ، أ tracerte إلى أن عنوان IP المذكور قد يوفر بعض المعلومات التفصيلية لأحد مدراء الشبكة ، حيث يمكن أن يتعلق الأمر بنفس القدر بتوجيه الشبكة أو NAT.

الاحتمال الثالث هو أنك قد تحتاج إلى تعيين صريح Proxy خاصية على الخاص بك SoapHttpClientProtocol مثيل عميل الصابون. WinForms التقاط هذا تلقائيًا ، ولكن من خدمة/تطبيق ويب ، ليس هذا هو الحال.

شاهد تعليقاتي على منشورات الأشخاص الآخرين أيضًا ، ولكن بالإضافة إلى ذلك ، تتعلق بسجل التشخيص الخاص بك ، هذا هو XML الذي لدي في تكوينه لتفريغ سجل تتبع WCF:

<configuration>

    <system.diagnostics>
        <sources>
            <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
                <listeners>
                    <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "MyService.svclog" />
                </listeners>
            </source>
        </sources>
    </system.diagnostics>

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