Когда я запускаю свой WPF, который использует мою библиотеку услуг WCF через визуальную студию, я получаю запуск WCF Service Host одновременно с моей службой, начиная с моей Библиотеки услуг WCF, однако, когда я нажимаю на exe для своего WPF в папке отладки, 't startup все равно, чтобы он начинался с кода, поскольку следующий код, который, как я полагал, будет работать, не работает.
try
{
host = new ServiceHost(typeof(Service1), new Uri("http://" + System.Net.Dns.GetHostName() + ":8733/DatabaseTransferWcfServiceLibaryMethod/Service1/"));
host.Open();
}catch(AddressAlreadyInUseException)
{
}
Я пытаюсь не использовать ссылки на службы.
Хорошо, ошибка была вдали от того места, где я думал, что это была ошибка, когда он работал на моем потоке пользовательского интерфейса, поэтому его нужно было добавить.
[ServiceBehavior( UseSynchronizationContext = false)]
Если у кого-то еще есть эта проблема, я надеюсь, что это поможет.
Я не эксперт в этом, но, возможно, вам не хватает привязки. Вот простой пример, который я могу создать для хостинга и использования службы 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 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;
}
}
}