当我运行通过visual studio使用我的WCF服务库的WPF时,我的服务启动我的WCF服务库同时启动WCF服务主机启动,但是当我在调试中单击我的WPF的exe时文件夹它不启动无论如何都要在代码中启动它,因为下面的代码我相信它不起作用。
try
{
host = new ServiceHost(typeof(Service1), new Uri("http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/"));
host.Open();
}catch(AddressAlreadyInUseException)
{
}
我试图不使用服务引用。
答案 0 :(得分:1)
我不是这方面的专家,但也许你错过了绑定。这是我可以在代码中创建托管和使用WCF服务的最简单示例(您需要添加对System,System.Runtime.Serializaton和System.ServiceModel的引用,否则,此代码已完成)。
using System;
using System.Runtime.Serialization;
using System.ServiceModel;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Create the host on a single class
using
( ServiceHost host
= new ServiceHost
( typeof(MyService)
, new Uri("http://localhost:1234/MyService/MyService")
)
){
// That single class could include multiple interfaces to
// different services, each must be added here
host.AddServiceEndpoint
( typeof(IMyService)
, new WSHttpBinding(SecurityMode.None)
// Each service can have it's own URL, but if blank use the
// default above
, ""
);
// Open the host so it can be consumed
host.Open();
// Consume the service (this cuold be in another executable)
using
( ChannelFactory<IMyService> channel
= new ChannelFactory<IMyService>
( new WSHttpBinding(SecurityMode.None)
, "http://localhost:1234/MyService/MyService"
)
){ IMyService myService = channel.CreateChannel();
Console.WriteLine(myService.GetValue());
}
// Clean up
host.Close();
}
}
}
[ServiceContract]
public interface IMyService
{ [OperationContract] int GetValue();
}
public class MyService : IMyService
{ public int GetValue()
{ return 5;
}
}
}
答案 1 :(得分:0)
好的,错误是远离我认为错误的地方,它是在我的用户界面线程上运行所以需要添加。
[ServiceBehavior( UseSynchronizationContext = false)]
如果有其他人有这个问题,我希望这有帮助。