That Metadata error is what I get when I browse to the service in a browser. I am not consuming it with a client
and Yes.. I added <serviceMetadata httpGetEnabled="True"/>
, and I have a mex endpoint defined
but it still won't work..
So I created a barebones service to host on IIS7. Fresh install of Windows 7 and VS2010.
I had followed the instructions of this page to the lett开发者_StackOverflow社区er:
http://msdn.microsoft.com/en-us/library/ms733766.aspx
I'm convinced that this has to be some sort of configuration issue with IIS7 but and not sure. Here's my service setup:
EDIT:
I tried accessing the service with svcutil and got the following error:
The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..
it also says: The HTML document does not contain Web service discovery information.
not sure how to resolve it, however..
.svc file:
<%@ServiceHost language="C#" Debug="true" Service="DestructionServices.TacticalNukeSVC
"%>
.cs file (located in the C:\Development\HostedDestructionServices\App_Code folder):
using System;
using System.ServiceModel;
namespace DestructionServices
{
[ServiceContract]
public interface INukeInterface
{
[OperationContract]
string FireMissile();
[OperationContract]
string DirectFire(double x, double y, double z);
[OperationContract]
void EnterCoordinates(double x, double y, double z);
}
public class TacticalNukeSVC : INukeInterface
{
public string FireMissile()
{
return "Boom";
}
public void EnterCoordinates(double x, double y, double z)
{
//bah, who cares about coordinates..
}
public string DirectFire(double x, double y, double z)
{
return "Fired at: " + x + ", " + y + ", " + z;
}
}
}
Web.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<services>
<service name="DestructionServices.Destro" behaviorConfiguration="MetadataBehavior">
<endpoint address="" binding="wsHttpBinding" contract="DestructionServices.INukeInterface" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MetadataBehavior">
<serviceDebug includeExceptionDetailInFaults="True" httpHelpPageEnabled="True" />
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Your code and config seems fine - except for one little point:
In your <service>
tag, you have defined a name that doesn't seem to correspond to the class that actually implements your service:
<service name="DestructionServices.Destro" ......>
**************************
but your class is:
namespace DestructionServices
{
.....
public class TacticalNukeSVC : INukeInterface
{
Those names need to match! The name=
attribute on the <service>
tag in config must be exactly what your service class is called - fully qualified, including namespace - so in your case here, it should be:
<service name="DestructionServices.TacticalNukeSVC" ......>
Previously working WCF with nice~ settings stopped working and shows - error- Metadata publishing for this service is currently disabled.
THOUGH MEX Settings are perfect, still WCF shows above error, reason: The virtual directory created from VS IDE IS NOT Created, though it gives "success" message..
Just Create Virtual Directory in IIS manually , Bingo error is resolved.
Hope it helps!
Encountered a similar issue. I had the wrong namespace in my service tag in web.config as against the namespace for the service class in the svc file.
web.config
< service name="X.Y.Z.ContentService" behaviorConfiguration="XServiceBehavior">
svc file
<%@ ServiceHost Language="C#" Debug="true" Service="X.Y.A.ContentService" %>
As seen above, service tag in web.config had namespace X.Y.Z where the svc file had X.Y.A.
(Thanks to Marc)
I had another issue. I have an IIS asmx application, and inside I've placed a subfolder with svc. Configured it properly, but it didn't give me the metadata until I found this in web.config in parent directory:
<system.web>
<webServices>
<soapExtensionTypes>
<add type="SPFWebService.SPFWebServiceExtension,App_Code" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
</system.web>
Fixed it by removing my new service to a separate directory.
if you have a class with no default constructor an another constructors , then add an empty default constructor , I had the same issue and i resolved it by this .
I had a similar issue. For anyone that might come across this later. My problem was that my service interface did not have the [ServiceContract] DataAnnotation
[ServiceContract] //<--This was missing
public interface IServiceInterface
{
[OperationContract]
void Foo(Bar bar)
//...
}
精彩评论