Vinnaren i pepparkakshustävlingen!
2017-01-12, 22:13
  #3097
Medlem
Hur kan man genom Visual Studio ange några keyword arguments innan exekveringen?
Citera
2017-01-13, 11:15
  #3098
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av cqo
Hur kan man genom Visual Studio ange några keyword arguments innan exekveringen?
Vet inte om jag förstår frågan, men command line arguments vid debugging kan du ställa in genom att högerklicka på projektet -> Properties -> Debug.
Citera
2017-01-13, 19:07
  #3099
Medlem
Citat:
Ursprungligen postat av Sane?
Vet inte om jag förstår frågan, men command line arguments vid debugging kan du ställa in genom att högerklicka på projektet -> Properties -> Debug.

Ja, perfekt. Precis det jag letade efter. Tack!
Citera
2017-01-26, 23:35
  #3100
Medlem
Sitkins avatar
Har saknat jobba med C# så har börjat med ett hobbyprojekt vid sidan om.
Funderade lite på det här med sk. multi-threading i applikationer. Hur och när är det bäst att implementera trådar i en applikation?
Jag har exempelvis tänkt använda det vid vanliga CRUD-anrop.

EX:
Kod:
Thread t = new Thread(() => accountDaoImpl.AddAccount(new Account(mailAddress,  HashPassword.TransformToHash(password))));
               
t.isBackground true;
                
t.Start(); 

Dock undrar jag om detta är en bra ide? Låt säga att 100 personer anropar angiven metod, betyder det då att ~100 trådar skapas samtidigt?
Vill även lyfta upp hur lätt det är att använda sig av trådar i C#. Mycket enklare än Java faktiskt.

Tack på förhand.
Citera
2017-01-27, 10:59
  #3101
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av Sitkin
Har saknat jobba med C# så har börjat med ett hobbyprojekt vid sidan om.
Funderade lite på det här med sk. multi-threading i applikationer. Hur och när är det bäst att implementera trådar i en applikation?
Jag har exempelvis tänkt använda det vid vanliga CRUD-anrop.

EX:
Kod:
Thread t = new Thread(() => accountDaoImpl.AddAccount(new Account(mailAddress,  HashPassword.TransformToHash(password))));
               
t.isBackground true;
                
t.Start(); 

Dock undrar jag om detta är en bra ide? Låt säga att 100 personer anropar angiven metod, betyder det då att ~100 trådar skapas samtidigt?
Vill även lyfta upp hur lätt det är att använda sig av trådar i C#. Mycket enklare än Java faktiskt.

Tack på förhand.
Att jobba direkt med Thread-klassen gör man oftast inte längre, om man inte har specialbehov. Att skapa nya trådar på det sättet som du visar är mycket resurskrävande.

Kolla på antingen ThreadPool eller Task+async/await.

Är det en http-service du skapar så finns inbyggt stöd för async i ex-vis ASP.Net MVC (https://docs.microsoft.com/en-us/asp...nchronous-code)
Citera
2017-01-27, 19:12
  #3102
Medlem
Sitkins avatar
Citat:
Ursprungligen postat av Sane?
Att jobba direkt med Thread-klassen gör man oftast inte längre, om man inte har specialbehov. Att skapa nya trådar på det sättet som du visar är mycket resurskrävande.

Kolla på antingen ThreadPool eller Task+async/await.

Är det en http-service du skapar så finns inbyggt stöd för async i ex-vis ASP.Net MVC (https://docs.microsoft.com/en-us/asp...nchronous-code)
Okej där ser man. Då förstår jag.
Nej det är en WCF jag bygger upp här.
Jag kollar på ThreadPool.
Tack.
Citera
2017-01-29, 00:09
  #3103
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av Sitkin
Okej där ser man. Då förstår jag.
Nej det är en WCF jag bygger upp här.
Jag kollar på ThreadPool.
Tack.
I sådant fall borde du läsa detta; https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
Gör man som i ditt kodexempel finns det inget sätt för anropande system att veta om operationen gick bra eller inte.
Citera
2017-01-29, 21:11
  #3104
Medlem
Sitkins avatar
Citat:
Ursprungligen postat av Sane?
I sådant fall borde du läsa detta; https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
Gör man som i ditt kodexempel finns det inget sätt för anropande system att veta om operationen gick bra eller inte.
Jag blir inte klok på informationen som finns på MSDN:
Jag har nu skapat två metoder(BeginLoginAccount resp. EndLoginAccount)
Såhär ser deklarationen av metoderna i interfacet:

Kod:
[OperationContract]
bool LoginAccount(string mailAddressstring password);

[
OperationContract(AsyncPattern true)]
IAsyncResult BeginLoginAccount(string mailAddressstring passwordAsyncCallback callbackobject asyncState);

bool EndLoginAccount(IAsyncResult result); 

I klassen som implementerar interfacet ser det ut såhär:
Kod:
public IAsyncResult BeginLoginAccount(string mailAddressstring passwordAsyncCallback callbackobject asyncState)
        {
            
bool returnedVal false;
            try
            {
                
returnedVal LoginAccount(mailAddresspassword);
            }
            catch (
NullReferenceException nre)
            {
                
CustomError ce = new CustomError("Invalid input values");
                throw new 
FaultException<CustomError>(cece.ToString());
            }
            return new 
CompletedAsyncResult<bool>(returnedVal);
        }

        public 
bool EndLoginAccount(IAsyncResult result)
        {
            
CompletedAsyncResult<boolasyncRes result as CompletedAsyncResult<bool>;
            return 
asyncRes.Data;
        } 

Nu undrar jag hur jag anropar LoginAccount asynkront?
När jag startar WCF test client syns inte metoderna i listan på tillgängliga metoder att "invoka".

Om jag har förstått det hela rätt så är detta eventdriven asynkroniskt anrop så jag misstänker att jag behöver skapa delegat och events? Känns som msdn artikeln inte är fullständig.

Tack på förhand.
Citera
2017-01-30, 09:42
  #3105
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av Sitkin
...
Svårt att säga något utan att se hela koden, men...
Beklagar att jag gav dig en kass länk. WCF stödjer async/await nu för tiden så det är nog bästa mönstret att jobba efter.

Enkel async implementation av en service:
Kod:
namespace WcfService1
{
    [
ServiceContract]
    public interface 
IService1
    
{
        [
OperationContract]
        
Task<stringGetData(int value);
    }

    public class 
Service1 IService1
    
{
        public 
async Task<stringGetData(int value)
        {
            var 
data await Task.FromResult(value.ToString());

            return 
data;
        }
    }

Bättre länk: https://visualstudiomagazine.com/art...-services.aspx

Man måste skilja på server- och client-side async. På serversidan använder man främst async för att inte låsa upp meddelandehanteringstrådar med tröga IO-arnrop. På client-side använder man (främst) async för att inte låsa GUI:t.
Du måste inte göra asynkrona clientside-anrop bara för att du har en asynkron service. Du måste heller inte skapa en asynkron service om du vill göra asynkrona serviceanrop.
WCF test client stödjer inte asynkrona anrop men kan fortfarande anropa servicen på synkront sätt.

Hostar du din service i IIS eller self-hosted?
Citera
2017-01-30, 20:23
  #3106
Medlem
Sitkins avatar
Citat:
Ursprungligen postat av Sane?
Svårt att säga något utan att se hela koden, men...
Beklagar att jag gav dig en kass länk. WCF stödjer async/await nu för tiden så det är nog bästa mönstret att jobba efter.

Enkel async implementation av en service:
Kod:
namespace WcfService1
{
    [
ServiceContract]
    public interface 
IService1
    
{
        [
OperationContract]
        
Task<stringGetData(int value);
    }

    public class 
Service1 IService1
    
{
        public 
async Task<stringGetData(int value)
        {
            var 
data await Task.FromResult(value.ToString());

            return 
data;
        }
    }

Bättre länk: https://visualstudiomagazine.com/art...-services.aspx

Man måste skilja på server- och client-side async. På serversidan använder man främst async för att inte låsa upp meddelandehanteringstrådar med tröga IO-arnrop. På client-side använder man (främst) async för att inte låsa GUI:t.
Du måste inte göra asynkrona clientside-anrop bara för att du har en asynkron service. Du måste heller inte skapa en asynkron service om du vill göra asynkrona serviceanrop.
WCF test client stödjer inte asynkrona anrop men kan fortfarande anropa servicen på synkront sätt.

Hostar du din service i IIS eller self-hosted?

Hej tack för ett bra svar. Jag hostar det på IIS.

En annan fråga: Med tanke på att jag utvecklar en web-service vill man att interoperabiliteten inte påverkas nämnvärt vid konsumtion av tjänsten av t.ex. andra programmeringsspråk. Returnerar man(på webservicenivå) en Task<bool> är det inte säkert att returvärdet kan hanteras av t.ex. java, swift etc. Vad tycker du om just den här aspekten? Några förslag?

Börjar bli långdraget detta så jag tackar ödmjukast om all hjälp jag har fått.
Citera
2017-01-31, 09:39
  #3107
Medlem
Sane?s avatar
Citat:
Ursprungligen postat av Sitkin
Hej tack för ett bra svar. Jag hostar det på IIS.

En annan fråga: Med tanke på att jag utvecklar en web-service vill man att interoperabiliteten inte påverkas nämnvärt vid konsumtion av tjänsten av t.ex. andra programmeringsspråk. Returnerar man(på webservicenivå) en Task<bool> är det inte säkert att returvärdet kan hanteras av t.ex. java, swift etc. Vad tycker du om just den här aspekten? Några förslag?

Börjar bli långdraget detta så jag tackar ödmjukast om all hjälp jag har fått.
Interoperabilitet beror bara på vilken binding du valt. Alla WS* bindningar kan konsumeras av andra språk.
Task<T> används internt av WCF för att fixa trådning, det är typen T (WS* representationen av T) som returneras.
De bindings vars namn börjar med ws kan konsumeras av andra språk, de som börjar med net kan endast konsumeras av .net-språk (men brukar ha andra fördelar).
Citera
2017-02-04, 15:34
  #3108
Medlem
(c#) Håller på med ett litet projekt i Visual studio, där jag vill att text ("welcome") ska dyka upp i en textbox när programmet startar. Jag har kollat runt på nätet, men har inte hittat någon information om hur jag gör. Gissar på att det är någon trigger jag behöver använda mig av.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback