c# - studio - wcf tutorial
Error de WCF: no se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato ''UserService.UserService'' (13)
Alguna idea de cómo solucionar este problema?
UserService.UserServiceClient userServiceClient = new UserServiceClient();
userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
userServiceClient.GetUsersAsync(searchString);
.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_UserService"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:52185/UserService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_UserService"
contract="UserService.UserService"
name="BasicHttpBinding_UserService" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="Shell.Silverlight.Web.Service3Behavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior"
name="Shell.Silverlight.Web.Service3">
<endpoint address=""
binding="basicHttpBinding"
contract="Shell.Silverlight.Web.Service3" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
No se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato ''UserService.UserService'' en la sección de configuración del cliente de ServiceModel. Esto podría deberse a que no se encontró ningún archivo de configuración para su aplicación, o porque no se pudo encontrar ningún elemento de punto final que coincida con este contrato en el elemento del cliente.
¡Resuelto!
No mencioné que esta era una aplicación de Silverlight. Tenía la referencia wcf en una DLL que tenía su propio archivo "ServiceReferences.ClientConfig". Moví el contenido de ServiceReferences.ClientConfig de la DLL al proyecto principal de Silverlight y funcionó.
¿Tiene una interfaz que implementa su clase "UserService"?
Sus puntos finales deben especificar una interfaz para el atributo de contrato:
contract="UserService.IUserService"
Cambie el archivo web.config del servicio WCF como "endpoint address =" "binding =" basicHttpBinding "..." (previamente vinculante = "wsHttpBinding") Después de compilar la aplicación, en "ServiceReferences.ClientConfig" "" configuration> tiene el valor . Entonces funcionará bien.
Cambie el nombre de output.config producido por svcutil.exe a app.config. funcionó para mí.
En caso de que alguien ataque el mismo problema mientras usa WPF (en lugar de WCF o Silverlight):
Tuve este error cuando me conecté a un servicio web. Cuando mi código estaba en la solución de aplicación WPF "principal", no hubo problema, funcionó perfectamente. Pero cuando moví el código a la solución de capa DAL más sensible, lanzaría la excepción.
No se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato ''MyWebService.MyServiceSoap'' en la sección de configuración del cliente de ServiceModel. Esto podría deberse a que no se encontró ningún archivo de configuración para su aplicación, o porque no se pudo encontrar ningún elemento de punto final que coincida con este contrato en el elemento del cliente.
Como ha indicado "Sprite" en este hilo, debe copiar la etiqueta manualmente.
Para las aplicaciones WPF, esto significa copiar la etiqueta de la aplicación.config en mi solución DAL a la aplicación.config en la solución principal de la aplicación WPF.
En caso de que esté utilizando la aplicación WPF utilizando el marco PRISM, entonces la configuración debería existir en su proyecto de inicio (es decir, en el proyecto donde reside su programa de arranque).
En resumen, simplemente elimínelo de la biblioteca de la clase y colóquelo en un proyecto de inicio.
Este problema se produce cuando utiliza su servicio a través de otra aplicación. Si la aplicación tiene un archivo de configuración, simplemente agregue la información de configuración del servicio a este archivo. En mi situación no había ningún archivo de configuración, así que uso esta técnica y funcionó bien. Simplemente almacene la dirección URL en la aplicación, léala y utilizando el método BasicHttpBinding () envíela a la aplicación de servicio como parámetro. Esta es una demostración sencilla de cómo lo hice eso:
Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());
var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);
SimpleService.PayPointSoapClient client =
new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(),
remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);
Me encontré con el mismo problema, por alguna razón Visual Studio no actualizó la configuración web cuando agregué el servicio por primera vez. Descubrí que la actualización de la Referencia del servicio también solucionó este problema.
Pasos:
- Navega a la carpeta de referencia del servicio
- Expandelo
- Haga clic con el botón derecho y seleccione Actualizar referencia del servicio
- Observe que se actualice la configuración web
Me encontré con el mismo problema. Mi aplicación también era una aplicación de Silverlight y se llamaba al servicio desde una biblioteca de clase con un UserControl personalizado que se estaba utilizando en él.
La solución es simple. Copie las definiciones de punto final del archivo de configuración (por ejemplo, ServiceReferences.ClientConfig) de la biblioteca de clases al archivo de configuración de la aplicación silverlight. Sé que esperarías que funcionara sin tener que hacer esto, pero aparentemente alguien en Redmond tuvo unas vacaciones ese día.
No estoy seguro de si esto es un problema. El punto final y el enlace tienen el mismo nombre
No estoy seguro de si realmente es un problema, pero veo que tiene el mismo nombre para su configuración de enlace ().
Normalmente trato de llamar a mis puntos finales algo así como "UserServiceBasicHttp" o algo similar (el "Enlace" realmente no tiene nada que ver aquí), y trato de llamar a mis configuraciones vinculantes algo con ".... Configuración", por ejemplo "UserServiceDefaultBinding", para evitar posibles conflictos de nombres.
Bagazo
Para aquellos que trabajan con los servicios AX 2012 AIF e intentan llamar allí al proyecto C # o VB dentro de AX (x ++) y sufren de tales errores de "no se pudo encontrar el punto final predeterminado" ... o "no se encontró contrato" ... volver a su proyecto visual studio (c #) y agregue estas líneas antes de definir su cliente de servicio, luego implemente el proyecto y reinicie el cliente AX y vuelva a intentarlo: Tenga en cuenta que el ejemplo es para adaptador NetTcp , puede usar cualquier otro adaptador según su necesidad .
Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
NetTcpBinding Binding = new NetTcpBinding();
EndpointAddress EndPointAddr = new EndpointAddress(Address);
SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);
También puede establecer estos valores programáticamente en la biblioteca de clases, esto evitará el movimiento innecesario de los archivos de configuración en la biblioteca. El código de ejemplo para BasciHttpBinding simple es -
BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);
Tuve que agregar el servicio en el archivo de aplicación App.config para que funcione. Asegúrate de que lo tienes después de todo. Esto pareció funcionar para mí.