[MY - AL] Utilisation WCF

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
maliimaloo
Messages : 45
Inscription : 28 Sep 2017 19:06

[MY - AL] Utilisation WCF

Message par maliimaloo » 06 Fév 2018 18:51

Bonjour,

Je mets se poste car j'aurais besoin d'un petit coup main, j'utilise maintenant la version d'Unity 2018.1.0b4 qui permet d'être sous .Net 4.6 (expérimental) donc grâce à cela j'arrive à incorporer mon service WCF à mon jeu Unity mais avant cela j'avais un problème qui était la fonction Threading.Task qui a été résolu au passage de .Net 4.6 (expérimental) mais maintenant quand j'appelle mon service WCF j'obtiens une nouvelle erreur que même en cherchent sur le internet, je n'ai pas vraiment trouvé de solution correcte.

Erreur :

Code : Tout sélectionner

InvalidOperationException: Client endpoint configuration '*' was not found in 0 endpoints.
System.ServiceModel.ChannelFactory.ApplyConfiguration (System.String configurationName) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ChannelFactory.InitializeEndpoint (System.String configurationName, System.ServiceModel.EndpointAddress address) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ChannelFactory`1[TChannel]..ctor (System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel].Initialize (System.ServiceModel.InstanceContext instance, System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel]..ctor (System.ServiceModel.InstanceContext callbackInstance, System.String endpointConfigurationName) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel]..ctor (System.ServiceModel.InstanceContext callbackInstance) (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
System.ServiceModel.ClientBase`1[TChannel]..ctor () (at <dbc4e1c0f46a48ada75c3dc308d69d1b>:0)
Service1Client..ctor () (at Assets/ClientProxies/Service1.cs:100)
utilisationWCF.Price () (at Assets/Script/utilisationWCF.cs:14)
UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45)
UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()

Script Service WCF (PS: il comporte une erreur : Nom de type 'OperationContractAttributeAttribute' introuvable dans l'éspace de noms 'System.ServiceModel'. Ce type à été transmis à l'assembly 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Ajoutez une référence à cet assembly.) Elle se trouve au milieu du script quand ça utilise
[System.ServiceModel...]

Code : Tout sélectionner

//------------------------------------------------------------------------------
// <auto-generated>
//     Ce code a été généré par un outil.
//     Version du runtime :4.0.30319.42000
//
//     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
//     le code est régénéré.
// </auto-generated>
//------------------------------------------------------------------------------

namespace WcfService1
{
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Runtime.Serialization.DataContractAttribute(Name="CompositeType", Namespace="http://schemas.datacontract.org/2004/07/WcfService1")]
    public partial class CompositeType : object, System.Runtime.Serialization.IExtensibleDataObject
    {
        
        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
        
        private bool BoolValueField;
        
        private string StringValueField;
        
        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
        {
            get
            {
                return this.extensionDataField;
            }
            set
            {
                this.extensionDataField = value;
            }
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public bool BoolValue
        {
            get
            {
                return this.BoolValueField;
            }
            set
            {
                this.BoolValueField = value;
            }
        }
        
        [System.Runtime.Serialization.DataMemberAttribute()]
        public string StringValue
        {
            get
            {
                return this.StringValueField;
            }
            set
            {
                this.StringValueField = value;
            }
        }
    }
}


[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IService1")]
public interface IService1
{
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetPrice", ReplyAction="http://tempuri.org/IService1/GetPriceResponse")]
    float GetPrice(string id);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetPrice", ReplyAction="http://tempuri.org/IService1/GetPriceResponse")]
    System.Threading.Tasks.Task<float> GetPriceAsync(string id);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetData", ReplyAction="http://tempuri.org/IService1/GetDataResponse")]
    string GetData(int value);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetData", ReplyAction="http://tempuri.org/IService1/GetDataResponse")]
    System.Threading.Tasks.Task<string> GetDataAsync(int value);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetDataUsingDataContract", ReplyAction="http://tempuri.org/IService1/GetDataUsingDataContractResponse")]
    WcfService1.CompositeType GetDataUsingDataContract(WcfService1.CompositeType composite);
    
    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/GetDataUsingDataContract", ReplyAction="http://tempuri.org/IService1/GetDataUsingDataContractResponse")]
    System.Threading.Tasks.Task<WcfService1.CompositeType> GetDataUsingDataContractAsync(WcfService1.CompositeType composite);
}

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IService1Channel : IService1, System.ServiceModel.IClientChannel
{
}

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class Service1Client : System.ServiceModel.ClientBase<IService1>, IService1
{
    
    public Service1Client()
    {
    }
    
    public Service1Client(string endpointConfigurationName) : 
            base(endpointConfigurationName)
    {
    }
    
    public Service1Client(string endpointConfigurationName, string remoteAddress) : 
            base(endpointConfigurationName, remoteAddress)
    {
    }
    
    public Service1Client(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(endpointConfigurationName, remoteAddress)
    {
    }
    
    public Service1Client(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(binding, remoteAddress)
    {
    }
    
    public float GetPrice(string id)
    {
        return base.Channel.GetPrice(id);
    }
    
    public System.Threading.Tasks.Task<float> GetPriceAsync(string id)
    {
        return base.Channel.GetPriceAsync(id);
    }
    
    public string GetData(int value)
    {
        return base.Channel.GetData(value);
    }
    
    public System.Threading.Tasks.Task<string> GetDataAsync(int value)
    {
        return base.Channel.GetDataAsync(value);
    }
    
    public WcfService1.CompositeType GetDataUsingDataContract(WcfService1.CompositeType composite)
    {
        return base.Channel.GetDataUsingDataContract(composite);
    }
    
    public System.Threading.Tasks.Task<WcfService1.CompositeType> GetDataUsingDataContractAsync(WcfService1.CompositeType composite)
    {
        return base.Channel.GetDataUsingDataContractAsync(composite);
    }
}
Mon script d'utilisation du service

Code : Tout sélectionner

using System;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using WcfService1;

public class utilisationWCF : MonoBehaviour
{
    public InputField question;
    public Text reponse;

    public void Price()
    {
        Service1Client client = new Service1Client();

        Task.Run(() => MaMethodeAsynchroneAsync(question.text, client));
    }

    private async Task MaMethodeAsynchroneAsync(string input, Service1Client client)
    {
        Debug.Log($"Prix de l'objet {input} : {await client.GetPriceAsync(input)}");
    }
}
Voici mon outpout.config

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IService1" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://127.0.0.1/Service1.svc" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
          name="BasicHttpBinding_IService1" />
    </client>
  </system.serviceModel>
</configuration>

Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

Re: [MY - AL] Utilisation WCF

Message par Narkos » 11 Fév 2018 03:35

Salut,

A priori la solution à ton problème se trouve dans ce post

Bon dév!

Répondre

Revenir vers « (C#) CSharp »