运行调试中的.exe时运行WCF服务库

时间:2014-10-07 09:04:29

标签: c# .net wpf wcf

当我运行通过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)
{
}

我试图不使用服务引用。

2 个答案:

答案 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)]

如果有其他人有这个问题,我希望这有帮助。