【问题标题】:ASMX schema varies when using WCF Service使用 WCF 服务时,ASMX 架构会有所不同
【发布时间】:2010-06-06 10:45:29
【问题描述】:

我有一个客户端(使用 ASMX“添加 Web 引用”创建)。该服务是 WCF。方法的签名因客户端和服务而异。我得到了一些不需要的方法参数。

注意:我对 DataMember 使用了 IsRequired = true。

Service:    [OperationContract]
            int GetInt();

Client:     proxy.GetInt(out requiredResult, out resultBool);

您能否帮助我使 WCF 客户端和非 WCF 客户端中的 schame 保持不变?我们有这方面的最佳做法吗?

using System.ServiceModel;
using System.Runtime.Serialization;

namespace SimpleLibraryService
{
        [ServiceContract(Namespace = "http://Lijo.Samples")]
        public interface IElementaryService
        {
            [OperationContract]
            int GetInt();

            [OperationContract]
            int SecondTestInt();
        }

        public class NameDecorator : IElementaryService
        {
            [DataMember(IsRequired=true)]
            int resultIntVal = 1;

            int firstVal = 1;

            public int GetInt()
            {
                return firstVal;
            }

            public int SecondTestInt()
            {
                return resultIntVal;
            }
        }

}

Binding = "basicHttpBinding"

using NonWCFClient.WebServiceTEST;

namespace NonWCFClient
{
    class Program
    {
        static void Main(string[] args)
        {
            NonWCFClient.WebServiceTEST.NameDecorator proxy = new NameDecorator();

            int requiredResult =0;
            bool resultBool = false;
            proxy.GetInt(out requiredResult, out resultBool);
            Console.WriteLine("GetInt___"+requiredResult.ToString() +"__" + resultBool.ToString());

            int secondResult =0;
            bool secondBool = false;
            proxy.SecondTestInt(out secondResult, out secondBool);
            Console.WriteLine("SecondTestInt___" + secondResult.ToString() + "__" + secondBool.ToString());

            Console.ReadLine();
        }
    }
}

请帮忙..

谢谢

李乔

【问题讨论】:

    标签: asmx wcf


    【解决方案1】:

    我不认为你可以做很多事情来使这个“不变” - 这就是从 WCF 服务生成 ASMX 客户端内容的方式。每个客户端堆栈都略有不同,并且可能以稍微不同的方式解释 WSDL 中的服务契约。对此你无能为力.....

    如果您不希望这样做,请改为创建 WCF 客户端。

    旁注:

    public class NameDecorator : IElementaryService
    {
       [DataMember(IsRequired=true)]
       int resultIntVal = 1;
    

    这是非常奇怪您尝试将DataMember(应该为服务序列化的字段)到实现的类中的方式服务......

    您应该将您的服务合同(接口IElementaryService)、服务实现(类NameDecorator)和您的数据合同(其他类)分开-不要混合数据合同和服务实施-这肯定会适得其反……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2013-02-02
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      相关资源
      最近更新 更多