使用现有WCF服务
我对WCF服务的编程非常陌生,所以我希望如果你回答我的问题,你会考虑到这一点,并像我是个孩子一样向我解释(WCF傻瓜服务:)。我有一个需要连接的现有WCF服务。我应该创建自己的WCF服务,该服务将与现有服务通信,并共享一些已在现有服务中定义的请求和响应对象。有谁能告诉我如何一步一步地做到这一点(在两者之间建立通信,并在服务中使用与现有服务相同类型的对象)?我试图在网上找到答案,但都有点混乱(参考、使用合同…)。正如我所说的,你可以自由地解释,就像你要向一个真正的初学者解释一样。欢迎提供任何帮助…“我应该创建自己的WCF服务,该服务将与现有WCF服务通信,并共享一些已在现有服务中定义的请求和响应对象。”-听起来您需要创建一个客户机来连接到该服务(请参见下文如何创建客户机)。您可以创建WCF服务来与另一个服务进行通信,但您需要比此格式允许的更多的后台 您可以通过访问了解WCF的最新情况。在示例中的WF_WCF_Samples\WCF\Basic下,您可以找到许多应该首先进行的服务/客户端设置。有很多关于这个话题的文章 在10000英尺的视野中: 客户端-要使用服务,请创建测试控制台应用程序。在项目中添加服务引用(右键单击引用时,您将看到该选项)。将“服务引用”对话框的地址指向您想要使用的服务,就会发生很多事情。最终的结果是,您可以使用下面的方法调用您的服务上的服务方法(其中Service1将替换为您正在调用的任何服务) 服务-您可以使用方法和类型创建一个接口,然后使用属性装饰此接口,例如:使用现有WCF服务,wcf,reference,datacontract,Wcf,Reference,Datacontract,我对WCF服务的编程非常陌生,所以我希望如果你回答我的问题,你会考虑到这一点,并像我是个孩子一样向我解释(WCF傻瓜服务:)。我有一个需要连接的现有WCF服务。我应该创建自己的WCF服务,该服务将与现有服务通信,并共享一些已在现有服务中定义的请求和响应对象。有谁能告诉我如何一步一步地做到这一点(在两者之间建立通信,并在服务中使用与现有服务相同类型的对象)?我试图在网上找到答案,但都有点混乱(参考、使用合同…)。正如我所说的,你可以自由地解释,就像你要向一个真正的初学者解释一样。欢迎提供任何帮助…
[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();
}
}