سؤال

وأنا أحاول أن استخدام خدمة ويب طرف ثالث (لذلك أنا لا يستطيعون الوصول إلى رمز الخدمة على شبكة الإنترنت). في Visual Studio 2008 I بإنشاء مشروع الموقع الجديد (ASP و C #)، وأضاف المرجع على شبكة الإنترنت (وليس خدمة الإنترنت! لذا أعتقد أنه ليس خدمة WCF ... صحيح؟).

والمشكلة هي أن من وثائق خدمة الويب وأنا أعلم أن كل طلب الصابون لابد من إرسالها مع مغلف ورأس التالية، يمكنك من فضلك قل لي كيف لإضافة هذا في طلبات صابون بلدي؟ كل الحلول لقد وجدت مطلوب تعديل مصدر خدمة ويب أو وكيل، لا أستطيع أن أفعل ذلك لأنني لم يكن لديك الوصول إلى مصدر خدمة الويب وكيل خدمة ويب في عميل في Visual Studio 2008 يأتي في قراءة فقط ملف مؤقت!

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" soap:mustUnderstand="1">
<wsse:UsernameToken xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:Username>gimme.data@stats.com</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Ima5tatto</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body xmlns:ns2="http://neighbourhood.statistics.gov.uk/nde/v1-0/discoverystructs">
<ns2:AreaAtLevelElement>
<AreaIdWithLevelType>
<AreaId>276704</AreaId>
<LevelTypeId>12</LevelTypeId>
</AreaIdWithLevelType>
</ns2:AreaAtLevelElement>
</soap:Body>
</soap:Envelope>
هل كانت مفيدة؟

المحلول

ويمكنك إضافة ثابت رؤوس الرسائل في ملف التكوين باستخدام رؤوس عنصر في نقطة النهاية عنصر. سيتم نسخ كل عنصر تابع للعنصر رؤوس كما هو في رأس الرسالة.

نصائح أخرى

وأنا أعاني مع هذه القضية نفسها، وحتى الآن قد كتبت مفتش لتكون قادرة على الحصول على رؤوس SOAP، على الرغم من أنني لست متأكدا من كيفية الحصول على wsse: الاشياء الأمنية هناك دون الحاجة إلى القيام بذلك يدويا. وأود أن تكون قادرة على استخدام مخطط WS-الأمن (وكذلك المخططات SAML) لبناء wsse: الاشياء الأمن ...

لما يستحق رسالتي كود مفتش أقل، وإذا كنت حل هذا أنا ما بعد على هذا الموضوع.

وهنا حيث يمكنني إضافة السلوك إلى العميل:

client.Endpoint.Behaviors.Add(new CustomBehavior());
msgOutput = client.ProvideAndRegisterDocumentSetXDR(msgInput);

وهنا هو مفتش رسالة والعرف السلوك:

public class CustomMessageInspector : System.ServiceModel.Dispatcher.IClientMessageInspector
{
    public void AfterReceiveReply(ref WCF.Message reply, object correclationState)
    {
    }

    public Object BeforeSendRequest(ref WCF.Message request, IClientChannel channel)
    {
        MessageHeaders headers = new MessageHeaders(MessageVersion.Soap11WSAddressing10);
        MessageHeader header = MessageHeader.CreateHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "");
        request.Headers.Add(header);
        return null;
    }
}


public class CustomBehavior : System.ServiceModel.Description.IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRunTime)
        {
            CustomMessageInspector inspector = new CustomMessageInspector();
            clientRunTime.MessageInspectors.Add(inspector);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
        }

        public void Validate(ServiceEndpoint endpoint)
        {
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top