使用WCF服务时,ASMX架构会有所不同

时间:2010-06-06 10:45:30

标签: asmx wcf

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

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

Service:    [OperationContract]
            int GetInt();

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

你能不能帮助我在WCF clinet和非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();
        }
    }
}

请帮助..

由于

Lijo

1 个答案:

答案 0 :(得分:0)

我认为你不能做太多让这个“不变” - 这就是从WCF服务生成ASMX客户端的东西的方式。每个客户端堆栈与另一个堆栈有点不同,并且可能以稍微不同的方式解释WSDL中的服务契约。你能做的就不多了......

如果您不想这样做 - 请改为创建一个WCF客户端。

旁边的评论:

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

非常奇怪您是如何尝试将DataMember(应该为服务序列化的字段)放入实现服务.....

您应该将服务合同(接口IElementaryService),服务实施(类NameDecorator)和您的数据合同(其他类)分开 - 执行混合数据合同和服务实施 - 这肯定会以某种方式适得其反......