我懂了


  “没有端点在https://localhost/BassCoastServices/GeneralUtilityService.svc上听到
  可以接受消息。这通常是由不正确的地址引起的
  或SOAP操作。有关更多详细信息,请参见InnerException(如果存在)。”


当我从客户端调用GeneralUtilityService时,


  “没有频道积极收听'https://laura-laptop/BassCoastServices/GeneralUtilityService.svc'。
  这通常是由不正确的地址URI引起的。确保
  邮件发送到的地址与一个地址匹配
  服务正在倾听。”


调试w3wp时显示。

我可以使用某种工具来确保客户端和服务器配置文件对齐吗?
如果这是一个简单的解决方法,请参见下面的App和Web配置文件。

App.config

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="Username" value="sampleuser"/>
    <add key="Password" value="samplepassword"/>
    <add key="basePath" value="C:\Temp"/>
  </appSettings>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <bindings>
      <wsHttpBinding>
        <binding name="standardBinding" closeTimeout="01:00:00" openTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="01:00:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" allowCookies="true">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="163840" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <reliableSession ordered="true" inactivityTimeout="01:00:00" enabled="false"/>
          <security mode="TransportWithMessageCredential" >
            <transport clientCredentialType="Certificate" proxyCredentialType="None"  />
            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ClientCertificateBehavior">
          <callbackDebug includeExceptionDetailInFaults="true"/>
          <clientCredentials>
            <clientCertificate findValue="localhost" x509FindType="FindByIssuerName" storeLocation="LocalMachine" storeName="My">
            </clientCertificate>
          </clientCredentials>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <client>

      <endpoint address="https://localhost/BassCoastServices/GeneralUtilityService.svc" behaviorConfiguration="ClientCertificateBehavior" binding="wsHttpBinding" bindingConfiguration="standardBinding" contract="Adapt.WCF.IGeneralUtilityService" name="IGeneralUtilityServiceEndPoint">
        <identity>
          <dns value="localhost"/>
        </identity>
      </endpoint>

    </client>
  </system.serviceModel>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
  </startup>
</configuration>


Web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <appSettings>

    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
    <add key="DatabaseConnectionString" value="Data Source=(local)\SQL2014;Initial Catalog=XIVICProduction;User ID=sa;Password=sameplepassword;MultipleActiveResultSets=True"/>
    <add key="LogFilePath" value="C:\inetpub\wwwroot\Xivic\BassCoastServices\Log\Log.txt"/>
    <add key="AllowMissingExternalIDs" value="true"/>

    <!--No need to change-->
    <add key="LogFileTypeLevel" value="Error"/>
    <add key="SqlServerDateTimeStyle" value="103"/>
    <add key="DatabaseType" value="Sql"/>
    <add key="EnforceSecurityAtBusinessRulesLayer" value="false"/>
    <add key="DateComparisonInaccuracy" value="35000"/>
    <add key="CacheAccessItemsAtBusinessLayer" value="true"/>
    <add key="CacheRecordsAtDataLayer" value="true"/>
    <add key="SesionTimeout" value="1440"/>
  </appSettings>

  <system.serviceModel>

    <services>
      <!-- ENDPOINTS -->
      <service name="IGeneralUtilityServiceEndPoint" behaviorConfiguration="UserNameBehaviour">
        <endpoint binding="wsHttpBinding" contract="Adapt.WCF.IGeneralUtilityService" bindingConfiguration="wsHttpEndpointBinding"/>
      </service>

    </services>

    <!-- BEHAVIOURS -->
    <behaviors>
      <serviceBehaviors>
        <behavior name="UserNameBehaviour">
          <serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentInstances="2147483647" maxConcurrentSessions="2147483647" />
          <serviceDebug includeExceptionDetailInFaults="True" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Adapt.WCF.Security.CustomUserNameValidator, Adapt.WCF" />
            <serviceCertificate findValue="localhost" x509FindType="FindByIssuerName" storeLocation="LocalMachine" storeName="My">
            </serviceCertificate>
          </serviceCredentials>
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <!-- BINDINGS -->
    <bindings>

      <wsHttpBinding>
        <binding name="wsHttpEndpointBinding">
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="None" />
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>

    </bindings>

  </system.serviceModel>

  <system.diagnostics>
        <sources>
            <source name="System.ServiceModel"
                    switchValue="Information, ActivityTracing"
                    propagateActivity="true">
                <listeners>
                    <add name="traceListener"
                        type="System.Diagnostics.XmlWriterTraceListener"
                        initializeData= "C:\inetpub\wwwroot\Xivic\BassCoastServices\Log\Traces.svclog" />
                </listeners>
            </source>
        </sources>
    </system.diagnostics>

  <!--startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
  </startup-->

</configuration>


呼叫WCF

_Channel = GetProxy<IGeneralUtilityService>();
_Channel.BeginTransaction(transactionId);
_Channel.CommitTransaction(transactionId);

public static T GetProxy<T>()
{
    var channelFactory = new ChannelFactory<T>(string.Format("{0}EndPoint", typeof(T).Name));
    channelFactory.Credentials.UserName.UserName = ConfigurationSettings.AppSettings["Username"];
    channelFactory.Credentials.UserName.Password = ConfigurationSettings.AppSettings["Password"];
    var workflowProxy = channelFactory.CreateChannel();
    return workflowProxy;
}


提前致谢!

更新:我不知道我做了什么,但是现在我明白了


  “内容类型为application / soap + xml;服务http://localhost/BassCoastServices/GeneralUtilityService.svc不支持charset = utf-8。客户端和服务绑定可能不匹配。”

最佳答案

您的问题是创建渠道工厂的方式。有些人无法获得正确的EndpointConfigurationName。

我对如何仅在Channel Factory中仅将EndpointConfigurationName用作参数不太熟悉,但是您可以通过以下方式尝试:

var channelFactory = new ChannelFactory<T>("*", new EndpointAddress("https://localhost/BassCoastServices/GeneralUtilityService.svc"));

07-27 13:47