tipos significado example componentes wcf

significado - WCF-Nombre del contrato no se pudo encontrar en la lista de contratos



wcf vs web api (6)

Soy relativamente nuevo en WCF. Sin embargo, necesito crear un servicio que exponga datos a las aplicaciones cliente de Silverlight y AJAX. En un intento de lograr esto, he creado el siguiente servicio para servir como una prueba de concepto:

[ServiceContract(Namespace="urn:MyCompany.MyProject.Services")] public interface IJsonService { [OperationContract] [WebInvoke(Method = "GET", RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] List<String> JsonFindNames(); } [ServiceContract(Namespace="urn:MyCompany.MyProject.Services")] public interface IWsService { [OperationContract(Name="FindNames")] List<String> WsFindNames(); } [ServiceBehavior(Name="myService", Namespace="urn:MyCompany.MyProject.Services")] public class myService : IJsonService, IWsService { public List<String> JsonFindNames() { return FindNames(); } public List<String> WsFindNames() { return FindNames(name); } public List<string> FindNames() { List<string> names = List<string>(); names.Add("Alan"); names.Add("Bill"); return results; } }

Cuando intento acceder a este servicio, recibo el siguiente error:

El nombre del contrato ''myService'' no se pudo encontrar en la lista de contratos implementados por el servicio ''myService''.

¿Cuál es la causa de esto? ¿Cómo puedo solucionar esto?

Gracias


Elimine el espacio de nombres del nombre del servicio. Funcionará bien.


En el archivo web.config , el atributo de name del elemento de <service debe ser el nombre del tipo de servicio con el espacio de nombres, pero no el conjunto ( Namespace1.Namespace2.Class ). El atributo de contract del elemento <endpoint tiene de manera similar el tipo de interfaz calificada para el espacio de nombre - Namespace1.Namespace2.Interface .

Esto también resuelve todas las travesuras de comportamiento, como CreateBehavior no se invoca en BehaviorExtensionElement .


He tenido ese error antes para ServiceModel Framework 3.5 y revisé el archivo de configuración de mi host. Descubrí que era mi error de cortar y pegar. Mi servicio apuntaba a un viejo servicio no existente que el que estoy usando. Comienza a funcionar de nuevo después de corregir estas líneas como a continuación:

<system.serviceModel> <services> <!--<service name="NotUsed.Serv">--> <service name="InUse.MyService"> <host> <baseAddresses> <!--<add baseAddress="http://localhost:8181/LastService" />--> <add baseAddress="http://localhost:8181/InUseService"/> </baseAddresses> </host> </service> </services> </system.serviceModel>

Tenga en cuenta que MyService tiene que ser el nombre de su clase de contrato en ServiceModel 3.5 PERO ES LA interfaz de contrato de IMyService en Framework 4.0 ->

namespace InUse { [ServiceContract] public interface IMyService { [WebGet(UriTemplate = "/GetList/{PATTERN}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] [OperationContract] List<string> GetIDListByPattern(string PATTERN); } [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class MyService : IMyService { List<string> MySample = (new _PointRT()).Sample().Select(r=>r._pointXID).ToList(); public List<string> GetIDListByPattern(string PATTERN) { return MySample.Where(x => x.Contains(PATTERN)).ToList(); } }


Modifique su web.config Puede encontrar la etiqueta <services> y debajo de esta etiqueta debe tener otras dos etiquetas:

<service .... Y <endpoint ....

En la etiqueta <endpoint> , debe hacer referencia a la interfaz de su clase.

Por ejemplo: si su clase de servicio llamada CustomerSearch y su interfaz llamada ICustomerSearch tiene que configurar de esta manera:

<service name="CustomerSearch" behaviorConfiguration="ServiceBehavior"> <endpoint address="" binding="webHttpBinding" contract="ICustomerSearch" behaviorConfiguration="ServiceAspNetAjaxBehavior">


Su contrato es la interfaz, no la implementación.

En alguna parte de la configuración, ha escrito myService en lugar de IJsonService.


Tenía el mismo problema, pero mi solución era que en mi web.config, estaba especificando el nombre completo de la clase (incluido el espacio de nombres), mientras que WCF solo aceptaba un nombre de clase.

Esto no funcionó:

<services> <service name="BusinessServices.Web.RfsProcessor">

Esto funcionó:

<services> <service name="RfsProcessor">