2009-09-17 5 views
1
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="HTTPBaseAddress" 
     value="http://localhost:8000/Derivatives/"/> 
    <add key="TCPBaseAddress" 
     value="net.tcp://localhost:8010/Derivatives/"/> 
    </appSettings> 
    <system.diagnostics> 
    <sources> 
     <source 
       name="System.ServiceModel.MessageLogging" 
       switchValue="Verbose"> 
     <listeners> 
      <add 
         name="xml" 
         type="System.Diagnostics.XmlWriterTraceListener" 
         initializeData="c:\logs\message.log" /> 
     </listeners> 
     </source> 
    </sources> 
    <trace autoflush="true" /> 
    </system.diagnostics> 

    <system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" 
          maxMessagesToLog="300" 
          logMessagesAtServiceLevel="false" 
          logMalformedMessages="true" 
          logMessagesAtTransportLevel="true" /> 
    </diagnostics> 

    <services> 
     <service type= 
"DerivativesCalculator.DerivativesCalculatorServiceType,DerivativesCalculatorService" 
behaviorConfiguration="DerivativesCalculatorService"> 
     <endpoint 
        address="Calculator" 
        binding="wsHttpBinding" 
        contract= 
"DerivativesCalculator.IDerivativesCalculator,DerivativesCalculatorService" 
       /> 
     </service> 
    </services> 
    <behaviors> 
     <behavior name="DerivativesCalculatorService"> 
     <serviceSecurityAudit auditLogLocation="Application" messageAuthenticationAuditLevel="SuccessOrFailure" serviceAuthorizationAuditLevel="SuccessOrFailure"/> 
     </behavior> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Ce App.config génère l'exception suivante:WCF - Problème de configuration de l'hôte. étiquette de comportement n'est pas reconnu

Unrecognized attribute 'type'. Note that attribute names are case-sensitive. 

Mon code source est comme suit:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace DerivativesCalculator 
{ 
    public class Calculator 
    { 
     public decimal CalculateDerivative(
      string[] symbols, 
      decimal[] parameters, 
      string[] functions) 
     { 
      return (decimal)(System.DateTime.Now.Millisecond); 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Text; 

using DerivativesCalculatorService; 
using DerivativesCalculator; 

namespace DerivativesCalculator 
{ 
    public class DerivativesCalculatorServiceType : IDerivativesCalculator 
    { 
     decimal IDerivativesCalculator.CalculateDerivative(
     string[] symbols, 
     decimal[] parameters, 
     string[] functions) 
     { 
      return new Calculator().CalculateDerivative(
       symbols, parameters, functions); 

     } 

     void IDerivativesCalculator.DoNothing() 
     { 
      return; 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.ServiceModel; 

namespace DerivativesCalculatorService 
{ 
    [ServiceContract] 
    public interface IDerivativesCalculator 
    { 
     [OperationContract] 
     decimal CalculateDerivative(
      string[] symbols, 
      decimal[] parameters, 
      string[] functions); 

     void DoNothing(); 
    } 
} 


using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.ServiceModel; 
using System.Text; 

namespace DerivativesCalculator 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Type serviceType = typeof(DerivativesCalculatorServiceType); 

      string httpBaseAddress = ConfigurationManager.AppSettings["HTTPBaseAddress"]; 
      string tcpBaseAddress = ConfigurationManager.AppSettings["TCPBaseAddress"]; 

      Uri httpBaseAddressUri = new Uri(httpBaseAddress); 
      Uri tcpBaseAddressUri = new Uri(tcpBaseAddress); 
      Uri[] baseAdresses = new Uri[] { 
       httpBaseAddressUri, 
       tcpBaseAddressUri}; 

      using (ServiceHost host = new ServiceHost(
       serviceType, 
       baseAdresses)) 
      { 
       host.Open(); 

       Console.WriteLine("The derivatives calculator service is available."); 
       Console.ReadKey(); 

       host.Close(); 
      } 
     } 
    } 
} 

Comment résoudre ce problème?

+0

J'ai effectué la modification suggérée. Mais une nouvelle exception apparaît. ::::: Elément non reconnu 'comportement' ::::::. – anonymous

Répondre

3

Je crois que cette ligne de votre fichier de configuration est incorrect:

<service
type="DerivativesCalculator.DerivativesCalculatorServiceType,DerivativesCalculatorService"
behaviorConfiguration="DerivativesCalculatorService">

Je pense plutôt que le type = "" doit être name = "".

<service
name="DerivativesCalculator.DerivativesCalculatorServiceType,DerivativesCalculatorService"
behaviorConfiguration="DerivativesCalculatorService">

+0

Stuart: Je pense que vous avez raison; aussi, le nom = "...." ne devrait contenir que le nom de la classe de service - ** NOT ** l'assemblage après la virgule, aussi! –

+0

J'ai fait le changement suggéré. Mais une nouvelle exception apparaît. ::::: Elément non reconnu 'comportement' ::::::. – anonymous

+0

Je ne suis pas vraiment sûr de ce qui causerait la non-reconnaissance de l'élément de comportement. La seule idée que je peux arriver est que peut-être une erreur a été faite lors de la modification de l'attribut de type à nommer. Est-il possible qu'il y ait un "/ or> symbole non concordant quelque part dans le fichier? Tant que est sous dans le fichier devrait être légal. –

Questions connexes