سؤال

أحاول كتابة خدمة WRAPPER WROPPER WCF لخدمة WSE3 / ASMX Web. [السبب القبيح لماذا لن يدعم بائع الطرف الثالث SSL وهذا هو ما هو مطلوب لمحول BizTalk 2009 WCF للعمل مع أمان WS. لذلك إذا لم يتغير البائع - أحتاج إلى استدعاء خدمة WCF محلية ...

تابعت هذه المقالة للحصول على WSE3 الوكيل المدمج إلى VS2008:http://blogs.imeta.co.uk/jyoung/archive/2008/08/29/345.aspx.أقوم بإجراء مرجع على شبكة الإنترنت إلى خدمة الويب البعيدة عن البائع.

أقوم بنشر وتنشر WebService محليا، وحاول فقط إحضاره في المتصفح، واحصل على هذا الخطأ:

system.invalidoperationException: تم إلقاء استثناء في مكالمة إلى ملحق تصدير WSDL: System.servicemodel.description.dataconactracterializeroperioperationbiorpehavior http://tempuri.org/:veluationservice.----> system.runtime.serialization.invaliddataconcessexceptionException: اكتب "Microsoft.Web.services3.addressing.address" لا يمكن تسلسل. النظر في وضع علامة عليه باستخدام سمة DataContracttribute، ووضع علامات على جميع أعضائها التي تريد تسلسلها بسمة Datamemberttribute. راجع وثائق Microsoft .NET Framework للأنواع الأخرى المدعومة.

كيف يمكنني إجراء كائن لم أكتبه ('Microsoft.Web.Services3.addressing.address') Serializable؟ هل من الممكن إنجاز ما أحاول؟

شكرًا،

نيل والترز


معلومات إضافية - الاثنين 16 نوفمبر 2009:


[ServiceContract]
public interface IValuationService
{
    [OperationContract]
    ExpressLync.ValuationServiceWse GetPropertyInfoSourceRecordPolicyNum(string PolicyNumber);
}
// end of interface 

// here is part of reference.cs...
public partial class ValuationServiceWse : Microsoft.Web.Services3.WebServicesClientProtocol {
...

المكان الوحيد الذي يمكنني العثور عليه أي إشارة إلى ما -انا على الإطلاق إلى "Microsoft.Web.services3.addressing.address 'موجود هنا، على البيانات الوصفية عندما أقوم ب" انتقل إلى تعريف "من Microsoft.Web.Services3.WebservicesClientProtoCol

using Microsoft.Web.Services3.Addressing;
using Microsoft.Web.Services3.Design;
using System;
using System.Net;
using System.Web.Services.Protocols;
using System.Xml;

namespace Microsoft.Web.Services3
{
    public class WebServicesClientProtocol : SoapHttpClientProtocol
    {
        public WebServicesClientProtocol();

        public EndpointReference Destination { get; set; }
        public Pipeline Pipeline { get; set; }
        public SoapContext RequestSoapContext { get; }
        public bool RequireMtom { get; set; }
        public SoapContext ResponseSoapContext { get; }
        public string Url { get; set; }
        public bool UseDefaultCredentials { get; set; }

        public TSecurityToken GetClientCredential<TSecurityToken>() where TSecurityToken : Microsoft.Web.Services3.Security.Tokens.SecurityToken;
        protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize);
        public TSecurityToken GetServiceCredential<TSecurityToken>() where TSecurityToken : Microsoft.Web.Services3.Security.Tokens.SecurityToken;
        protected override WebRequest GetWebRequest(Uri uri);
        protected override WebResponse GetWebResponse(WebRequest request);
        protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result);
        protected override XmlWriter GetWriterForMessage(SoapClientMessage message, int bufferSize);
        public void SetClientCredential<TSecurityToken>(TSecurityToken clientToken) where TSecurityToken : Microsoft.Web.Services3.Security.Tokens.SecurityToken;
        public void SetPolicy(Policy policy);
        public void SetPolicy(string policyName);
        public void SetServiceCredential<TSecurityToken>(TSecurityToken serviceToken) where TSecurityToken : Microsoft.Web.Services3.Security.Tokens.SecurityToken;
    }
}

بمعنى بمعنى آخر، كيف يمكنني التخلص من "Microsoft.Web.services3.addressing.address؟ يبدو أن نقطة النهاية في كائن "Microsoft.Web.Services3.Addressing.Address". لذلك إذا كنت أستخدم التعليمات البرمجية التي تم إنشاؤها WSE3، فإنها تحاول تسلسلها.

لذلك أعتقد أن الحل سيكون لكتابة غلاف آخر هو WSE3 مجانا - وفضحه عبر WCF. لكن الخدعة هي أن خدمات الويب البائعين لديها العديد من الأشياء الكبيرة والمعقدة - والتي تظهر الآن الآن من Microsoft.Web.services3.webservicesclientprotocroct (لأنني أستخدم مولد رمز WS3). أنا حقا لا أريد بناء كل منهم يدويا مرة أخرى. في المثال أعلاه، "Valuationservice" هي مجرد واحدة من هذه الأشياء.

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

المحلول 2

حسنا، كانت هنا هي المشكلة. كنت أحصل على غائم بعض الشيء وفقدت في تعقيد هذا التطبيق الذي يعرض 4 خدمات وعشرات الأساليب، وأول مرة للاستخدام من أي وقت مضى WSE3 من WCF.

الخطأ كان لأن التفاف كتب كان يحاول إرجاع قيمة القيمة نفسه. كان هذا خطأ غبي. قامت Valuationservice بتطبيق Microsoft.Web.webservices3.webservicesclientprotocroctocom والتي تضمنت فئة العنوان التي كانت تسبب المشكلة.

كان من المفترض أن يستخدم المجمع Valuationservice كعميل، وإرجاع فقط التقييم (أو ValuationResult). تعد ValuationResult بالطبع مجرد كائن يتكون من سلاسل، الكسور العشرية، المنطمنون، إلخ ... والتي يمكن أن تكون تسلسل.

نصائح أخرى

لا يمكنك صنع شيء غير قابل للتسلسل "بعد الحقيقة". السؤال هو: ما الذي تحتاجه "العنوان" ل؟

هل يمكن أن تغير غلاف WCF الخاص بك حتى تتمكن من اجتياز عنوان (إذا كان هذا عنوان URL الذي أظن أنه) كسلسلة من عميلك إلى خدمة WCF الخاصة بك، ثم قم بإنشاء مثيل "العنوان" داخل فئة خدمة WCF الخاصة بك ب

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