WCF توقيت الخروج من خدمات ويندوز ولكن ليس في تطبيقات الويب

StackOverflow https://stackoverflow.com/questions/807060

سؤال

مرحبا جميعا

أواجه حاليا مشكلة استدعاء خدمة WCF من خدمة windows.طلبي الحل يبدو مثل هذا.

  • ويب إدارة وحدة التحكم (مشروع ويب)
  • التحكم المركزي (خدمة Windows)
    • خدمة WCF حتى الإدارة ويب وحدة التحكم يمكن الاتصال به وتكوينه
    • عدة مكالمات إلى استخدام WCF على العقدة (نافذة الخدمة)
  • عقدة (خدمة Windows)
    • خدمة WCF أن تسمح السيطرة المركزية خدمة Windows تكوين

الإدارة ويب وحدة التحكم يمكن الوصول إلى السيطرة المركزية WCF ولكن السيطرة المركزية مرات أي وقت مضى عندما كان يحاول الاتصال العقدة.في اختبار هذا أنا خلقت قاذفة التطبيق هو بسيط Windows شكل مشروع إنشاء مثيل من كل من لديه اثنين من الأزرار التي تستخدم WCF وظيفة في كل من خدمات ويندوز (فقط لرؤية ما كان الفشل) هذا قاذفة التطبيق لا تتحدث إلى أي من خدمات ويندوز.كان هذا الخلط لي لذا وأضاف نفس الأزرار إلى نموذج ويب في شبكة وحدة تحكم الإدارة هو متصل على حد سواء خدمات Windows تماما من خلال صندوق رأس المال العامل.أنا أعرف WCF الأشياء هو العامل كما يمكن أن تصل من خلال أي و ترى كل من رائعة XML (ومن الواضح أن حقيقة أن عمل مكالمات من التطبيق على شبكة الإنترنت هي إشارة جيدة من كونها وتشغيلها)

باختصار بلدي تطبيقات ويب يمكن استخدام خدمات WCF في خدمات Windows ولكن نماذج Windows و Windows الخدمات لا يمكن.لماذا هذا! ؟

لدي الكثير جدا بالفعل قد نفد من الوقت على هذا المشروع حتى سرعة الردود ستكون رهيبة!

التكنولوجيا/مدونة التفاصيل أنا لا تستخدم ملفات التكوين في التطبيقات.كل شيء يتم إنشاؤه من خلال رمز و لقد تم استخدام نفس رمز لجعل بلدي WCF المكالمات في كل مكان.أيضا حاولت أن تتحول الأمن من كل مكان في حال كانت هذه المسألة.أيضا أنا باستخدام نفس svcutil إنشاء ملفات الوكيل في كل مكان وكذلك للحفاظ على كل شيء ثابت

سبيل الدعوة إلى العقدة

Dim Bind As New WSHttpBinding(SecurityMode.None, True)
Bind.CloseTimeout = New TimeSpan(0, 0, 10)
Bind.OpenTimeout = New TimeSpan(0, 0, 10)
Bind.SendTimeout = New TimeSpan(0, 0, 10)
Dim client As New BN.BNodeServiceClient(Bind, New EndpointAddress("http://localhost:27374/Node"))
client.sendMessage("Test Message")
client.Close()

العقدة فتح صندوق رأس المال العامل

BNodeHost = New ServiceHost(GetType(iBNodeService))
BNodeHost.AddServiceEndpoint(GetType(BNodeService), New WSHttpBinding(SecurityMode.None, True), New Uri("http://localhost:27374/Node"))
Dim metadataBehavior As ServiceModel.Description.ServiceMetadataBehavior
metadataBehavior = BNodeHost.Description.Behaviors.Find(Of _
ServiceModel.Description.ServiceMetadataBehavior)()

If metadataBehavior Is Nothing Then
    metadataBehavior = New ServiceModel.Description.ServiceMetadataBehavior()
    metadataBehavior.HttpGetEnabled = True
    metadataBehavior.HttpGetUrl = New Uri("http://localhost:27374/Node")
    BNodeHost.Description.Behaviors.Add(metadataBehavior)
Else
    BNodeHost.Description.Behaviors.Add(metadataBehavior)
End If

BNodeHost.Open()

كل هذا كان العامل قبل أن بت مختلفة السليم خدمات Windows و حاولت إضافة القائمين عليه.التركيب تعمل بشكل جيد و تثبيت الخدمات التي تبدأ تسمح لي أن أرى كل WCF XML في IE.

كما قد يكون قادرا على أن أقول, أنا جديدة جدا WCF و هذا هو أول تطبيق استخدامه.الأساسية بت وقد تم إلى حد كبير نسخ/لصق/تغيير الوظائف من عينة أن لا تستخدم ملفات التكوين.

أي مساعدة سيكون موضع تقدير كبير.

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

المحلول

تحقق من أن كافة نقاط النهاية في appconfig تطابق الإعدادات في الادارة webapp webconfig.كل واحد مجموعات مختلفة مهلة القيم ، أي:

<system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_ILookupService" closeTimeout="00:01:00"
                 openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                 bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
                 textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                     maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                     enabled="false" />
                    <security mode="Message">
                        <transport clientCredentialType="Windows" proxyCredentialType="None"
                         realm="" />
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                         algorithmSuite="Default" establishSecurityContext="true" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <behaviors>
            <endpointBehaviors>
                <behavior name="LargeEndpointBehavior">
                    <dataContractSerializer  ignoreExtensionDataObject="true" maxItemsInObjectGraph="2147483647"/>
                </behavior>
            </endpointBehaviors>
        </behaviors>

        <client>
            <endpoint address="http://localhost:59599/LookupService.svc"
             binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ILookupService"
             contract="FEEALookupServiceReference.ILookupService" name="WSHttpBinding_ILookupService">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>

على أمل أن يساعد.حظا سعيدا.

نصائح أخرى

لا أستطيع العمل هذه بشكل صحيح.يبدو أن هناك مشكلة مع خدمة ويندوز إلى ويندوز خدمة الاتصالات.هناك طريقة لجعل هذا يحدث في مكان ما ولكن داهمني الوقت لذا حلها عن طريق تحويل من بت (التحكم المركزي) في ويندوز العادي التطبيق و تثبيته بهذه الطريقة.يعمل بشكل جيد و العميل هو سعيد :)

تحقق من أذونات المستخدمين أن خدمات ويندوز تعمل تحت - أنها ترغب في الافتراضي إلى خدمة الشبكة التي قد لا يكون لديك أذونات كافية.تشغيلها متخصص المستخدم الأذونات الصحيحة.

وتحقق جدار حماية Windows.أنه يحب أن منع بعض من اتصالات على شبكة الإنترنت.أنا عادة فقط إيقاف تشغيله.

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