Wpf adatkötés comboBox, Wcf services configuration
2014-10-29T09:24:33+01:00
2014-12-03T20:35:52+01:00
2022-08-09T06:45:29+02:00
Mala88
Sziasztok! 
Egy olyan problémába ütköztem, hogy az istenér sem tudom feltölteni a comboboxot adatokkal, asztali alkalmazást csinálok, mely wcf-en keresztül kommunikál egy szerverrel. (itt is vannak bajok például nagyméretű fájl letöltése nem működik, de a feltöltése igen) service-n keresztül lekérem az adatokat mondjuk egy listába  és hozzákötném így: comboBox.ItemsSource= list ez is működik de elég érdekesen, egyik comboBoxnál működik, de van több is ott nem...
a másik probléma, hogy a comboBoxnak leginkább value-t és text-et adnék meg, de ez sem megy, mondjuk a szövege az az hogy kép, de az értéke egy id ami 1. Valaki tudna rá egy jó kis példát, vagy elmagyarázná nekem
Mutasd a teljes hozzászólást!

  • Szia
    felteszem az adatok megjönnek a wcf-ből, azzal nincs gond.
    Én a listát bindingsource-al kötném a comboboxhoz, az lekezel mindent ami kell neked.
    Egyszerű: ha a wcf-service-hez van már reference, akkor a datasources ablakban megjelenik, mind adatforrás. Onnan kihúzod comboboxként és kész. Nem bonyolult.
    Mutasd a teljes hozzászólást!
  • Szia, egy példát tudnál mutatni? annyira nem vagyok még jártas wpf-ben, és wcf konfigurálásban tudsz segíteni, fájlt feltudok tölteni a szerverre, de letölteni byte tömböt meg nem tudok, hihetetlen
    Mutasd a teljes hozzászólást!
  • Szia
    itt egy jó példa fájl fel és letöltésre:
    WCF Streaming: Upload/Download Files Over HTTP - CodeProject
    de én nem használnám a WCF-et fájl küldésre és fogadásra. Nem arra van kitalálva. Használj inkább normál http-s letöltést.

    üdv,
    B
    Mutasd a teljes hozzászólást!
  • na igen néztem korábban ezt a verziót is de a config valamiért itt sem akar menni.
    Megtudod nekem mondani, wpf-ben comboBoxnak kódból hogy tudom megadni a text-et és a value-t? SelectedListItem ismerős nekem asp.net-ből, de itt valamiért nem boldogulok...
    Mutasd a teljes hozzászólást!
  • Wpf-ben nem úgy működnek a dolgok

    kell egy model

    public class ComoboBoxModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propName)); } string _text; public string Text { get { return _text; } set { _text = value; OnPropertyChanged("Text"); } } int _value; public int Value { get { return _value; } set { _value = value; OnPropertyChanged("Value"); } } public ComoboBoxModel(string text, int value) { Text = text; Value = value; } }
    Kell egy ViewModel

    public class ViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propName) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propName)); } ObservableCollection<ComoboBoxModel> _models; public ObservableCollection<ComoboBoxModel> Models { get { return _models; } set { _models = value; OnPropertyChanged("Models"); } } ComoboBoxModel _selectedModels; public ComoboBoxModel SelectedModel { get { return _selectedModels; } set { //ide tegyé brékpöttyöt _selectedModels = value; OnPropertyChanged("SelectedModel"); } } public ViewModel() { Models = new ObservableCollection<ComoboBoxModel>(); Models.Add(new ComoboBoxModel("String1", 1)); Models.Add(new ComoboBoxModel("String2", 2)); Models.Add(new ComoboBoxModel("String3", 3)); Models.Add(new ComoboBoxModel("String4", 4)); } }

    A mögöttes kód és az XAML

    public partial class MainWindow : Window { private readonly ViewModel _viewModel; public MainWindow() { InitializeComponent(); _viewModel = new ViewModel(); DataContext = _viewModel; } } <Grid> <ComboBox ItemsSource="{Binding Models}" SelectedItem="{Binding SelectedModel}" DisplayMemberPath="Text" VerticalAlignment="Top"/> </Grid>
    Mutasd a teljes hozzászólást!
  • Értem, köszi a választ, amint tudom kipróbálom, már csak egy kérdésem lenne, service-n keresztül lekérem a tábla tartalmát, mondjuk a sor nevét meg az id-t, ami kellene nekem a comboboxba, ezzel a két listával töltsem fel a comboboxmodel két paraméterét igaz?

    Bónusz kérdés, wcf service-t sikerült beállítani valahogy :/ file-t tudok feltölteni service-n keresztül, de a letöltés még mindig nem megy, pedig ugyan úgy byte [] szeretnék letölteni, de elszáll exceptionnal

    Tudtok adni email vagy fb elérhetőséget ahol gyorsabban lehet kommunikálni? :)
    Mutasd a teljes hozzászólást!
  • Iservice:
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/UploadFile?fileName={fileName}")]
    void UploadFile(string fileName, byte[] data);


    [OperationContract]
    [WebGet(UriTemplate = "RetrieveFile?Path={path}")]
    byte[] RetrieveFile(string path);

    Service:


    public byte[] RetrieveFile(string path)
    {
    if (WebOperationContext.Current == null) throw new Exception("WebOperationContext not set");

    // As the current service is being used by a windows client, there is no browser interactivity.
    // In case you are using the code Web, please use the appropriate content type.
    var fileName = Path.GetFileName(path);
    WebOperationContext.Current.OutgoingResponse.ContentType = "application/octet-stream";
    WebOperationContext.Current.OutgoingResponse.Headers.Add("content-disposition", "inline; filename=" + fileName);

    var res= File.OpenRead(path);
    MemoryStream data= new MemoryStream();
    Stream str = res;
    str.CopyTo(data);
    byte[] buf = new byte[data.Length];

    data.Read(buf, 0, buf.Length);

    return buf;

    }

    public void UploadFile(string fileName, byte[] data)
    {
    string FilePath = Path.Combine(@"d:\Projektek\Fenyujsag\Files", fileName);

    using (FileStream writer = new FileStream(FilePath, FileMode.Create))
    {
    writer.Write(data, 0, data.Length);
    }
    }
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szia
    benne van a hiba. Ő nem octet-streamet vár, hanem textet.
    Nézd meg a codeprojectes linket, abban van egy osztály, ami alkalmas a fájl továbbításra.
    Ott a le van írva minden. Nézd át azt.
    Mutasd a teljes hozzászólást!
  • szia, sikerülte megoldanom a file le illetve feltöltés problémáját, most egy olyan problémába ütköztem, hogy le szeretném kérni egy tábla tartalmát, erre elszáll a service, de ha törlöm a táblához kapcoslódó navigation propertyket akkor semmi baja, szépen lejön az adat.

    Hibaüzenet: 
    An error occurred while receiving the HTTP response to http://localhost:3882/FenyujsagService.svc This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.

    Server stack trace:
    at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
    at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
    at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
    at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

    Exception rethrown at [0]:
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at IFenyujsagService.SelectAllTartalmak()
    at FenyujsagServiceClient.SelectAllTartalmak()

    Inner Exception:
    The underlying connection was closed: An unexpected error occurred on a receive.
    at System.Net.HttpWebRequest.GetResponse()
    at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

    Inner Exception:
    Unable to read data from the transport connection: A létező kapcsolatot a távoli állomás kényszerítetten bezárta.
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)

    Inner Exception:
    A létező kapcsolatot a távoli állomás kényszerítetten bezárta
    at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    Mutasd a teljes hozzászólást!
  • Heló!
    Ez a kliens oldali hiba. Mi a helyzet szerver oldalon?
    Mutasd a teljes hozzászólást!
  • nem teljesen értem a kérdést, a kérés elmegy a szerveroldalra, de nem jött onnan válasz, mert az elutasította
    Mutasd a teljes hozzászólást!
  • "This could also be due to an HTTP request context being aborted by the server"
    Vagy hiba miatt lezárta.
    Szerk.:

    <serviceDebug includeExceptionDetailInFaults="true" />
    És akkor megjön a hiba a kliensbe.
    Mutasd a teljes hozzászólást!
  • be van állítva, de nem értem mit kellene néznem, ez a hibaüzenet:

    {"An error occurred while receiving the HTTP response to http://localhost:3882/FenyujsagService.svc This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details."}

    akkor fordul elő, ha edmx modellben benne vannak a navigation propertik
    Mutasd a teljes hozzászólást!
  • itt a hibaüzenet
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • szia
    a szerver oldalon kell a navigation property-két betölteni mielott elküldöd a valaszt.
    a serializer nem tud mit kezdeni a navigation propertykkel,haazok nincsenek betöltve a modellbe.
    udv

    b
    Mutasd a teljes hozzászólást!
  • Köszi, már találtam egy megoldást itt, ez volt a legkönnyebb :) másik tt használni :) de bevált

    Entity Framework serialize során hiba (WCF) probléma - Tudástár - Prog.Hu
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd