web services - referencia - Error al agregar un servicio Los metadatos del servicio pueden no ser accesibles. Asegúrate de que tu servicio se esté ejecutando y exponiendo los metadatos.
service metadata in wcf (12)
Agregue Serializable()
antes del tipo que expone
Serializable()
Public Class YourType
Poner Serializable
en <>
EDITAR:
Después de que modifiqué el web.config
y no obtuve el error, eso es bueno ... luego agrego una nueva página (html) y escribo este pequeño código para consumir el servicio de esta manera:
$("#btn12").click(function (event) {
$.getJSON(''http://localhost:3576/MyService.svc/GetCurrentUser'', {},
function (data) {
alert(data);
});
//return false;
});
Veo el siguiente error en mi FireBug:
http://localhost:3576/MyService.svc/GetCurrentUser
400 Bad Request
Nota: He agregado una página html en el mismo proyecto wcf y estoy ejecutando el proyecto yo mismo, así que supongo que el servicio también se está ejecutando ...
¿Qué podría estar mal aquí?
FIN EDITAR
Acabo de crear un nuevo servicio wcf y cuando presiono f5 desde VS y obtengo este error en la ventana WCF Test Client:
Error al agregar un servicio Los metadatos del servicio pueden no ser accesibles. Asegúrate de que tu servicio se esté ejecutando y exponiendo los metadatos.
Error: no se pueden obtener los metadatos de http://localhost:3696/MobileService.svc Si se trata de un servicio de Windows (R) Communication Foundation al que tiene acceso, verifique que haya habilitado la publicación de metadatos en la dirección especificada. Para obtener ayuda sobre la publicación de metadatos, consulte la documentación de MSDN en http://go.microsoft.com/fwlink/?LinkId=65455 .
Error de intercambio de WS-Metadata
URI: http://localhost:3696/MyService.svc
Los metadatos contienen una referencia que no se puede resolver: '' http://localhost:3696/MyService.svc ''.No había un punto final que escuchara en http://localhost:3696/MyService.svc que pudiera aceptar el mensaje. Esto a menudo es causado por una dirección incorrecta o acción SOAP. Vea InnerException, si está presente, para más detalles.
No se puede conectar con el servidor remoto
No se pudo establecer ninguna conexión porque la máquina de destino la rechazó activamente. 127.0.0.1:3696
HTTP GET Error
URI: http://localhost:3696/MyService.svc
Se produjo un error al descargar '' http://localhost:3696/MyService.svc ''.
No se puede conectar con el servidor remoto
No se pudo establecer ninguna conexión porque la máquina de destino la rechazó activamente. 127.0.0.1:3696
Mi configuración:
<behaviors>
<endpointBehaviors>
<behavior name="MyService.MyService">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:2812/MyService.svc" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService"
behaviorConfiguration="metadataBehavior">
<endpoint
address="http://localhost/MyService.svc"
binding="customBinding"
bindingConfiguration="jsonpBinding"
behaviorConfiguration="MyService.MyService"
contract="MyService.IMyService"/>
</service>
</services>
<bindings>
<customBinding>
<binding name="jsonpBinding">
<jsonpMessageEncoding/>
<httpTransport manualAddressing="true"/>
</binding>
</customBinding>
</bindings>
<extensions>
<bindingElementExtensions>
<add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</bindingElementExtensions>
</extensions>
Después de Agregar esto a su archivo web.config y configurar de acuerdo con su nombre de servicio y el nombre del contrato.
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="" <!-- don''t put anything here - Cassini will determine address -->
binding="basicHttpBinding"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
Agregue esto en su Service.svc
using System.ServiceModel.Description;
Espero que te ayude.
En caso de cambiar el nombre del archivo svc, asegúrese de que su marcado sea correcto. no es necesario que modifique la configuración predeterminada y siga los pasos a continuación 1) Vaya al archivo SVC haga clic derecho y seleccione la marca de vista 2) Asegúrese de que el código detrás y servicio apuntando para corregir el nombre del archivo y la clase.
En mi caso, al comentar el
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
en el archivo web.config se lanzaba "Error al agregar un servicio. Es posible que no se pueda acceder a los metadatos del servicio. Asegúrese de que su servicio se esté ejecutando y exponiendo los metadatos".
He intentado varias soluciones mencionadas en la web, lamentablemente sin éxito. En mi proyecto, tengo dos interfaces (xml / json) para cada servicio. Agregar extremos de mex o configuraciones de enlace no ayudó en absoluto. Pero, me he dado cuenta, obtengo este error solo cuando ejecuto el proyecto con * .svc.cs o el archivo * .config enfocado. Cuando ejecuto el proyecto con el archivo IService.cs enfocado (donde las interfaces están definidas), el servicio se agrega sin ningún error. Esto es realmente extraño y, en mi opinión, la conclusión es un error en Visual Studio 2013. Reproduje el mismo comportamiento en varias máquinas (incluso en la máquina con Windows Server). Espero que esto ayude a alguien.
La mayoría de las veces esto ocurre debido a un menor espacio de memoria. primero revisa y luego prueba algunos otros trucos.
Necesita agregar un punto final de intercambio de metadatos (mex) a su servicio:
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="http://localhost/MyService.svc"
binding="customBinding" bindingConfiguration="jsonpBinding"
behaviorConfiguration="MyService.MyService"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
Ahora, debería poder obtener metadatos para su servicio
Actualización: está bien, por lo que acaba de lanzar esto desde Visual Studio; en ese caso, se alojará en Cassini, el servidor web incorporado. Sin embargo, esa bestia solo es compatible con HTTP: no está utilizando ese protocolo en su enlace ...
Además, dado que hospedas esto en Cassini, la dirección de tu servicio será dictada por Cassini: no puedes definir nada.
Entonces mi sugerencia sería:
- intente utilizar el enlace HTTP (ahora mismo para probar)
- haz que esto funcione
- una vez que sepa que funciona, cámbielo a su enlace personalizado y hágalo en IIS
Entonces cambiaría la configuración a:
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService.MyService" behaviorConfiguration="metadataBehavior">
<endpoint
address="" <!-- don''t put anything here - Cassini will determine address -->
binding="basicHttpBinding"
contract="MyService.IMyService"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
Una vez que tenga eso, intente hacer una View in Browser
en su archivo SVC en su solución de Visual Studio; si eso no funciona, todavía tiene un problema importante de algún tipo.
Si funciona, ahora puede presionar F5 en VS y su servicio debería aparecer, y usando la aplicación WCF Test Client , debería poder obtener los metadatos de su servicio de a) la dirección en la que Cassini comenzó su servicio, o b) la dirección mex (dirección Cassini + /mex
)
Observé que cuando eliminé SessionMode del atributo ServiceContract, el problema desapareció.
Ejemplo:
[ServiceContract(SessionMode=SessionMode.Required, CallbackContract=typeof(ICallbacks))]
public interface IStringReverser
{
[OperationContract]
string ReverseString(string value);
}
a...
[ServiceContract()]
public interface IStringReverser
{
[OperationContract]
string ReverseString(string value);
}
cambiar el tipo de enlace de wsHttpbinding a basichttp vinculante en la etiqueta de punto final y de wsHttpbinding a mexhttpbinginding en metadata tag de punto final ayudó a superar el error. Gracias...
si trabaja con el servicio .NET 4.0 WCF, asegúrese de que Global.asax no se encuentre en el directorio de origen. Si es así, se recoge en tiempo de ejecución e intenta compilarse en ...
FYI - TAMBIÉN PUEDE obtener este error de una máquina que no tiene suficiente memoria libre. Recibí este error en una máquina que corrí con 16 gigas de memoria. Tenía una VM ejecutándose con 6 gigas y MUCHAS aplicaciones intensivas de memoria. Cierre un poco y este problema desapareció.
Todavía obtuve el error en el título de la pregunta de
Error al agregar un servicio Los metadatos del servicio pueden no ser accesibles. Asegúrate de que tu servicio se esté ejecutando y exponiendo los metadatos.
Sin embargo, noté un mensaje más grande sobre la memoria al usar WCF Test Client.
Espero que esto ayude a alguien más.