Witam, zrobilem program server z kontraktem i aplikacje ktora sie z nim laczy, ale program nie dziala mimo braku bledow. Wszystko zacina sie na foreach. (Wiem ze moglem uzyc arraylisty, ale program powinien dzialac.)
Kontrakt
public class SerwisStatki : ZniszczInnych
{
private int[] polaPolozenia;
private int iloscTrafien = 0;
Boolean czyIstnieje = true;
int iloscRuchow = 0;
public void setPolaPolozenia(int[] polozenia)
{
polaPolozenia = polozenia;
}
public String sprawdz(String stringPole)
{
Console.WriteLine(stringPole);
iloscRuchow++;
int strzal = Int32.Parse(stringPole);
Console.WriteLine("jacek");
String wynik = "pudlo";
Console.WriteLine("jacek"); // tego jacka jeszcze drukuje
foreach (int pole in polaPolozenia) // tu sie program zacina z tego co mi sie wydaje.
{
if (strzal == pole)
{
wynik = "trafiony";
iloscTrafien++;
break;
}
}
Console.WriteLine("jacekasd");
if (iloscTrafien == polaPolozenia.Length)
{
wynik = "zatopiony";
czyIstnieje = false;
}
Console.WriteLine(wynik);
return wynik;
}
public void start()
{
while (czyIstnieje == true)
{
// Console.WriteLine(iloscRuchow + "ruchow");
}
}
}
Host
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://localhost:3000/SerwisStatki");
ServiceHost mojHost = new ServiceHost(typeof(SerwisStatki), baseAddress);
try
{
mojHost.AddServiceEndpoint(typeof(ZniszczInnych), new WSHttpBinding(), "GraWStatki");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
mojHost.Description.Behaviors.Add(smb);
mojHost.Open();
Console.WriteLine("Serwis jest uruchomiony.");
Console.WriteLine("Nacisnij <Enter> aby zakonczyc.");
Console.WriteLine();
ZniszczInnych gra = new SerwisStatki();
//PomocnikGry pomocnik = new PomocnikGry();
Random liczbaLosowa = new Random();
int card = liczbaLosowa.Next(8);
int[] polozenie = {card, card+1, card+2};
gra.setPolaPolozenia(polozenie);
gra.start();
Console.ReadLine();
mojHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("Wystapil wyjatek: {0}", ce.Message);
mojHost.Abort();
}
}
}
**Aplikacja ktora laczy sie z Hostem**
class Program
{
static void Main(string[] args)
{
//Krok 1: Utworzenie instancji WCF proxy.
ZniszczInnychClient client = new ZniszczInnychClient();
Boolean czyIstnieje = true;
Console.WriteLine("Podaj liczbe od 1 do 7 aby wykonac strzal.");
while (czyIstnieje == true)
{
kostka();
string stringPole = Console.ReadLine();
string result = client.sprawdz(stringPole);
Console.WriteLine(result);
if (result == "zatopiony")
{
czyIstnieje = false;
}
}
// Krok 3: Zamknięcie klienta zamyka polaczenie i czysci zasoby
client.Close();
}
public static void kostka()
{
Random szczesliwyRzut = new Random();
int rzut = szczesliwyRzut.Next(8);
Console.WriteLine("Jezeli nie wiesz jakie pole wybrac nasza magiczna kostka proponuje pole " + rzut);
}
}
Aplikacja laczy sie z hostem, w zalaczniku podalem wrzut z konsoli servera i aplikacji.