The following error occurs when trying to browse my .svc file.
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.NullReferenceException: Object reference not set to an instance of an object.
at System.ServiceModel.Description.WsdlExporter.CreateWsdlBindingAndPort(ServiceEndpoint endpoint, XmlQualifiedName wsdlServiceQName, Port& wsdlPort, Boolean& newBinding, Boolean& bindingNameWasUniquified)
at System.ServiceModel.Description.WsdlExporter.ExportEndpoint(ServiceEndpoint endpoint, XmlQualifiedName wsdlServiceQName)
at System.ServiceModel.Description.WsdlExporter.ExportEndpoints(IEnumerable`1 endpoints, XmlQualifiedName wsdlServiceQName)
at System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()
at System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized()
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData()
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(Message httpGetRequest, String[] queries, Message& replyMessage)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.Get(Message message)
at SyncInvokeGet(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
Here is my web.config configuration:
<system.serviceModel>
<services>
<service name="WcfServiceLib.WcfService"
behaviorConfiguration="Default">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/WebService"/>
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- Unless fully qualified, address is relative to base address supplied above -->
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceContractLib.IWcfContract"/>
<endpoint address="web" binding="webHttpBinding" contract="WcfServiceContractLib.IWcfContract"
behaviorConfiguration="web"/>
<endpoint address="webJson" binding="webHttpBinding" contract="WcfServiceContractLib.IWcfContract"
behaviorConfiguration="webJson"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp defaultOutgoingResponseFormat="Xml" helpEnabled="true"/>
</behavior>
<behavior name="webJson">
<webHttp defaultOutgoingResponseFormat="Json" helpEnabled="true"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled ="true" />
</system.serviceModel>
Anyone with this similar situation?
I should mention that when this is hosted in a console application I use to run tests everything is fine.
[EDIT] Same error occurs when trying to load the service in a console app. Not showing the WCF web page where you can see the wsdl info etc...
If you are using .NET 4.0 and trying to host SOAP, Xml and Json endpoints togeather you would get the exception. Just commment out either your Json or Xml endpoint and that should work fine.
This is a known issue which I have raised on Microsoft Connect and the MS dev team has closed it out as won't fix.
In order to support both Json and Xml if the client passes just the required Accept header in the request like "application/xml" or "application/json" the framework autoamtically handles it and sends back the response in appropriate format.
This is what I've got working:
Create a WCF Class Library project in VS2012.
Xsd Schema for data types:
Two ServiceContracts, note one adds the magic word,
[XmlSerializserFormat]
Implement your concrete class with the two interfaces:
Now create a blank ASP.NET project and add a
web.config
and aGlobal.asax
and a reference toSystem.ServiceModel.Activation
Global.asax.cs:
Here's the magic monster, system.serviceModel in web.config:
Browse to /soap for soap, /rest/json for restful json and /rest/xml for schema-compliant-ish xml.