पर आईओसी समर्थन जोड़ने की कोशिश कर रहा हूं, मैं अपनी आरईएसटी डब्ल्यूसीएफ सेवा (विंडोज सर्वर 2008) में आईओसी समर्थन जोड़ने की कोशिश कर रहा हूं। मैं इस के लिए नया हूँ और नीचे दिए गए वीडियो में दिए गए निर्देशों का अनुसरण कर रही हूं:मेरी डब्ल्यूसीएफ सेवाओं
http://www.dimecasts.net/Content/WatchEpisode/150
वीडियो कक्षाएं, जिनकी सहायता से StructureMap के आईओसी ऊपर और WCF अंतिम बिंदुओं को उजागर करते हुए चलाने के के एक नंबर के माध्यम से चलता है। मैंने इस पोस्ट के अंत में सभी कोड पोस्ट कर दिए हैं।
जब मैं अपने कोड चलाने के लिए, कस्टम वर्ग StructureMapServiceHost एक त्रुटि @ StructureMapServiceHost फेंकता (प्रकार ServiceType, पैरामीटर उरी [] baseAddress) विधि:
public class StructureMapServiceHost : ServiceHost
{
public StructureMapServiceHost() {}
public StructureMapServiceHost(Type serviceType, params Uri[] baseAddress)
: base(serviceType, baseAddress)
{
}
protected override void OnOpening()
{
Description.Behaviors.Add(new IoCServiceBehavior());
base.OnOpening();
}
}
मुझे बताया जा रहा है कि:
प्रदान की गई सेवा प्रकार को सेवा के रूप में लोड नहीं किया जा सका क्योंकि इसमें डिफ़ॉल्ट (पैरामीटर-कम) कन्स्ट्रक्टर नहीं है। समस्या को ठीक करने के लिए, प्रकार के लिए एक डिफ़ॉल्ट कन्स्ट्रक्टर जोड़ें, या मेजबान के प्रकार का उदाहरण पास करें।
यह सच है, ऐसा नहीं है। लेकिन वीडियो उदाहरण में एक भी नहीं था। नीचे मेरी सेवा है:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class UserService : IUserService
{
public UserService(IUserRepository specification)
{
Specification = specification;
}
public List<User> GetAllUsers()
{
return Specification.GetAllUsers();
}
public User GetUser(string userId)
{
return Specification.GetUserById(new Guid(userId));
}
private List<User> SearchForUsers(string searchString)
{
return Specification.SearchUsers(searchString);
}
public IUserRepository Specification { get; set; }
}
public class IoCServiceBehavior : IServiceBehavior
{
public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
}
public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase,
Collection<ServiceEndpoint> endpoints, BindingParameterCollection bindingParameters)
{
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcherBase cdb in serviceHostBase.ChannelDispatchers)
{
new StructureMapInstanceProvider(serviceDescription.ServiceType);
}
}
}
public class StructureMapInstanceProvider : IInstanceProvider
{
private readonly Type _serviceType;
public StructureMapInstanceProvider(Type serviceType)
{
_serviceType = serviceType;
}
public object GetInstance(InstanceContext instanceContext)
{
return GetInstance(instanceContext, null);
}
public object GetInstance(InstanceContext instanceContext, Message message)
{
var instance = ObjectFactory.GetInstance(_serviceType);
return instance;
}
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
throw new NotImplementedException();
}
}
public class StructureMapServiceHostFactory : ServiceHostFactory
{
public StructureMapServiceHostFactory()
{
IoCBootstrap.SetupIoc();
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new StructureMapServiceHost(serviceType, baseAddresses);
}
}
कोई विचार? धन्यवाद।
संपादित * ** * ** * ** * ** * ** * ** * ** * ** * * * * ****
संरचना से ChromeServiceHost मैंने हटा दिया:
public StructureMapServiceHost(Type serviceType, params Uri[] baseAddress)
: base(serviceType, baseAddress) { }
और कहा:
public StructureMapServiceHost(Object singletonInstance, params Uri[] baseAddress)
: base(singletonInstance, baseAddress) { }
और फिर मेरी UserService निर्माता से पैरामीटर हटा दिया। मैं त्रुटि नहीं मिल रहा है:
The HTML document does not contain Web service discovery information.
धन्यवाद फ्योदोर। मैंने आपके सुझावों का प्रयास किया है और एक नई त्रुटि मिली है। कृपया उपरोक्त मेरा ईडीआईटी देखें। क्या आप मुझे बता सकते हैं कि मैं क्या गलत कर रहा हूं? कोड चित्रण इस बिंदु पर मदद कर सकता है ... बहुत सराहना की। –
@ कोड शेरपा: अपने ब्राउज़र के साथ उस सेवा तक पहुंचने का प्रयास करें और देखें कि यह आपको कौन सी त्रुटि देता है। –
हाय फ़िडोर - मुझे मिल रहा है: संसाधन नहीं मिला। विवरण: HTTP 404. जिस संसाधन को आप ढूंढ रहे हैं (या इसकी निर्भरताओं में से एक) को हटा दिया जा सकता था, इसका नाम बदल गया था, या अस्थायी रूप से अनुपलब्ध है। कृपया निम्नलिखित यूआरएल की समीक्षा करें और सुनिश्चित करें कि यह सही वर्तनी है। अनुरोधित यूआरएल: /Users.svc/users –