Visual Studio выдает мне 2 предупреждения:
Severity Code Description Project File Line Suppression State
Warning WCF configuration validation warning: The 'name' attribute is invalid - The value 'MyServiceLibrary.MyService' is invalid according to its datatype 'serviceNameType'. MyServiceLibrary C:\MyDrive\Flavor\Net\1.0\App\MyServiceLibrary\App.config 10
Warning WCF configuration validation warning: The 'contract' attribute is invalid - The value 'MyServiceLibrary.IMyService' is invalid according to its datatype 'serviceContractType'. MyServiceLibrary C:\MyDrive\Flavor\Net\1.0\App\MyServiceLibrary\App.config 11
Вот часть файла app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>
<system.serviceModel>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyIpc.IpcAppToService">
<endpoint address="http://localhost:8733/MyIpcAppToService" binding="basicHttpBinding" bindingConfiguration="MyAppToIPCEndpointBinding" name="MyIpc_IIpcAppToService" contract="MyIpc.IIpcAppToService"/>
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/MyService/"/>
</baseAddresses>
</host>
</service>
</services>
...
</system.serviceModel>
</configuration>
Вот файл сервиса:
namespace MyServiceLibrary
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MyService : IMyService
{
...
}
}
Вот файл интерфейса:
using System.ServiceModel;
using System.ServiceModel.Web;
namespace MyServiceLibrary
{
[ServiceContract]
public interface IMyService
{
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/GetVersionInfo")]
[OperationContract]
string GetVersionInfo();
}
}
Вот мое понимание (app.config):
<service behaviorConfiguration="namespace" name="<namespace>.<service name>">
<endpoint address="..." ... contract="<namespace>.<interface name>"/>
В моем случае имя службы не находится в подкаталоге, поэтому:
namespace=MyServiceLibrary
service name=MyService (file is MyService.cs)
interface=IMyService (file is IMyService.cs)
То есть:
<service ... name="MyServiceLibrary.MyService">
и
<endpoint ... contract="MyServiceLibrary.IMyService"/>
Я уже знаю как факт, что contract
- это namespace.interface
.
Если бы я поместил служебные и интерфейсные файлы в подкаталог «Связь», чего я не сделал, но скажите, что сделал, тогда
<service ... name="MyServiceLibrary.Communication.MyService">
<endpoint ... contract="MyServiceLibrary.Communication.IMyService"/>
Где MyServiceLibrary.Communication
- пространство имен.
досадно, я все еще получаю предупреждения:
Severity Code Description Project File Line Suppression State
Warning WCF configuration validation warning: The 'name' attribute is invalid - The value 'MyServiceLibrary.MyService' is invalid according to its datatype 'serviceNameType'. MyServiceLibrary C:\MyDrive\Flavor\Net\1.0\App\MyServiceLibrary\App.config 10
Warning WCF configuration validation warning: The 'contract' attribute is invalid - The value 'MyServiceLibrary.IMyService' is invalid according to its datatype 'serviceContractType'. MyServiceLibrary C:\MyDrive\Flavor\Net\1.0\App\MyServiceLibrary\App.config 11
Есть несколько тем SO, обычно о веб-сервисах, но эта является репрезентативной и говорит о том, что я только что сделал.
Чего мне не хватает?