Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用现有WCF服务_Wcf_Reference_Datacontract - Fatal编程技术网

使用现有WCF服务

使用现有WCF服务,wcf,reference,datacontract,Wcf,Reference,Datacontract,我对WCF服务的编程非常陌生,所以我希望如果你回答我的问题,你会考虑到这一点,并像我是个孩子一样向我解释(WCF傻瓜服务:)。我有一个需要连接的现有WCF服务。我应该创建自己的WCF服务,该服务将与现有服务通信,并共享一些已在现有服务中定义的请求和响应对象。有谁能告诉我如何一步一步地做到这一点(在两者之间建立通信,并在服务中使用与现有服务相同类型的对象)?我试图在网上找到答案,但都有点混乱(参考、使用合同…)。正如我所说的,你可以自由地解释,就像你要向一个真正的初学者解释一样。欢迎提供任何帮助…

我对WCF服务的编程非常陌生,所以我希望如果你回答我的问题,你会考虑到这一点,并像我是个孩子一样向我解释(WCF傻瓜服务:)。我有一个需要连接的现有WCF服务。我应该创建自己的WCF服务,该服务将与现有服务通信,并共享一些已在现有服务中定义的请求和响应对象。有谁能告诉我如何一步一步地做到这一点(在两者之间建立通信,并在服务中使用与现有服务相同类型的对象)?我试图在网上找到答案,但都有点混乱(参考、使用合同…)。正如我所说的,你可以自由地解释,就像你要向一个真正的初学者解释一样。欢迎提供任何帮助…

“我应该创建自己的WCF服务,该服务将与现有WCF服务通信,并共享一些已在现有服务中定义的请求和响应对象。”-听起来您需要创建一个客户机来连接到该服务(请参见下文如何创建客户机)。您可以创建WCF服务来与另一个服务进行通信,但您需要比此格式允许的更多的后台

您可以通过访问了解WCF的最新情况。在示例中的WF_WCF_Samples\WCF\Basic下,您可以找到许多应该首先进行的服务/客户端设置。有很多关于这个话题的文章

在10000英尺的视野中:

客户端-要使用服务,请创建测试控制台应用程序。在项目中添加服务引用(右键单击引用时,您将看到该选项)。将“服务引用”对话框的地址指向您想要使用的服务,就会发生很多事情。最终的结果是,您可以使用下面的方法调用您的服务上的服务方法(其中Service1将替换为您正在调用的任何服务)

服务-您可以使用方法和类型创建一个接口,然后使用属性装饰此接口,例如:

[ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }
这些是您的服务可以执行的操作(OperationContract)。服务方法可以返回基元或复杂类型(字符串与复合类型),也可以获取复杂或基元的参数

您将执行本合同:

public class Service1 : IService1
    {
        public string GetData(int value)
        {
            throw  new ApplicationException("Boom");
            return string.Format("You entered: {0}", value);

        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite == null)
            {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
    }
接下来,您需要托管您的服务。根据您的托管要求,您有许多选择来完成这项任务。您可以执行的最简单托管操作是使用控制台应用程序:

class Program
    {
        static void Main(string[] args)
        {
            var host = new ServiceHost(typeof(Service1), new Uri("http://localhost:8999/"));

            host.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "");

            var metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (metadataBehavior == null)
            {
                metadataBehavior = new ServiceMetadataBehavior();
                metadataBehavior.HttpGetEnabled = true;
                host.Description.Behaviors.Add(metadataBehavior);
            }


            host.Open();

            Console.WriteLine("Running..");
            Console.ReadLine();
        }
    }
类程序
{
静态void Main(字符串[]参数)
{
var host=新的ServiceHost(类型为(Service1),新的Uri(“http://localhost:8999/"));
AddServiceEndpoint(typeof(IService1),新的BasicHttpBinding(),“”);
var metadataBehavior=host.Description.Behaviors.Find();
if(metadataBehavior==null)
{
metadataBehavior=新服务metadataBehavior();
metadataBehavior.HttpGetEnabled=true;
host.Description.Behaviors.Add(metadataBehavior);
}
host.Open();
Console.WriteLine(“正在运行的…”);
Console.ReadLine();
}
}
class Program
    {
        static void Main(string[] args)
        {
            var host = new ServiceHost(typeof(Service1), new Uri("http://localhost:8999/"));

            host.AddServiceEndpoint(typeof(IService1), new BasicHttpBinding(), "");

            var metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (metadataBehavior == null)
            {
                metadataBehavior = new ServiceMetadataBehavior();
                metadataBehavior.HttpGetEnabled = true;
                host.Description.Behaviors.Add(metadataBehavior);
            }


            host.Open();

            Console.WriteLine("Running..");
            Console.ReadLine();
        }
    }