question

IngeborgConradOscar-8380 avatar image
0 Votes"
IngeborgConradOscar-8380 asked IngeborgConradOscar-8380 published

WCF WPF Connection through ServiceReference

Hello, somehow i cant add a servicereference to my wpf from my wcf ... please help ...
it says something with my metadata isnt working properly but i dont know how to fix it
Below there is my code in case if it might help somebody to figure out my problem.
Thank you all for helping!


WCF

ISERVICE1
{
[ServiceContract]
public interface IService1
{
[OperationContract]
List<WeatherDataDTO> GetWeatherData(RangeFilter rangeFilter);
}

 [DataContract]
 public class RangeFilter
 {
     [DataMember]
     public string From { get; set; }

     [DataMember]
     public string To { get; set; }

     public RangeFilter() { }

     public RangeFilter(string From, string To)
     {
         this.From = From;
         this.To = To;
     }
 }

 [DataContract]
 public class WeatherDataDTO
 {
     [DataMember]
     public int Id { get; set; }

     // send as string because serialization error with DateTime
     [DataMember]
     public string Date { get; set; }

     [DataMember]
     public string Time { get; set; }

     [DataMember]
     public double Temperature { get; set; }

     [DataMember]
     public int Pressure { get; set; }

     [DataMember]
     public int Rain { get; set; }

     [DataMember]
     public double Wind { get; set; }

     [DataMember]
     public int Direction { get; set; }

     [DataMember]
     public int Humidity { get; set; }
 }



Service1

{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
public class Service1 : IService1
{
private TestEntities context = new TestEntities();

     public List<WeatherDataDTO> GetWeatherData(RangeFilter rangeFilter)
     {
         List<WeatherDataDTO> weatherDataDTOs = new List<WeatherDataDTO>();

         var start = parseDateTime(rangeFilter.From);
         var end = parseDateTime(rangeFilter.To);

         var query =
             from weatherData in context.WeatherData
             where weatherData.Datum >= start && weatherData.Datum <= end
             select weatherData;

         var i = 0;

         foreach (var weatherData in query)
         {
             weatherDataDTOs.Add(new WeatherDataDTO
             {
                 Id = weatherData.Id,
                 Date = weatherData.Datum.ToString(),
                 Direction = weatherData.Richtung.Value,
                 Humidity = weatherData.Feuchtigkeit.Value,
                 Pressure = weatherData.Luftdruck.Value,
                 Rain = weatherData.Regen.Value,
                 Temperature = weatherData.Temperatur.Value,
                 Time = weatherData.Zeit.Value.ToString(),
                 Wind = weatherData.Wind.Value
             });

             // Limit because of error: The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
             if (i == 100)
             {
                 break;
             }
             i++;
         }

         return weatherDataDTOs;
     }

     // parse back string (send as string because serialization error with DateTime)
     private DateTime parseDateTime(string dateString)
     {
         return DateTime.Parse(dateString);
         //var args = datestring.split('.');
         //return new datetime(
         //    convert.toint32(args[0]),
         //    convert.toint32(args[1]),
         //    convert.toint32(args[2])
         //);
     }
 }

}



WPF

 <Grid>
     <DataGrid x:Name="grid" HorizontalAlignment="Left" Height="288" Margin="10,121,0,0" VerticalAlignment="Top" Width="772" AutoGenerateColumns="False">
         <DataGrid.Columns>
             <DataGridTextColumn Binding="{Binding Id}" ClipboardContentBinding="{x:Null}" Header="Id"/>
             <DataGridTextColumn Binding="{Binding Date}" ClipboardContentBinding="{x:Null}" Header="Date"/>
             <DataGridTextColumn Binding="{Binding Time}" ClipboardContentBinding="{x:Null}" Header="Time"/>
             <DataGridTextColumn Binding="{Binding Temperature}" ClipboardContentBinding="{x:Null}" Header="Temperature"/>
             <DataGridTextColumn Binding="{Binding Pressure}" ClipboardContentBinding="{x:Null}" Header="Pressure"/>
             <DataGridTextColumn Binding="{Binding Rain}" ClipboardContentBinding="{x:Null}" Header="Rain"/>
             <DataGridTextColumn Binding="{Binding Wind}" ClipboardContentBinding="{x:Null}" Header="Wind"/>
             <DataGridTextColumn Binding="{Binding Direction}" ClipboardContentBinding="{x:Null}" Header="Direction"/>
             <DataGridTextColumn Binding="{Binding Humidity}" ClipboardContentBinding="{x:Null}" Header="Humidity"/>
         </DataGrid.Columns>
     </DataGrid>
     <Label Content="FROM:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
     <DatePicker x:Name="fromPicker" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="58,11,0,0"/>
     <Label Content="TO:" HorizontalAlignment="Left" Margin="28,41,0,0" VerticalAlignment="Top"/>
     <DatePicker x:Name="toPicker" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="58,40,0,0"/>
     <Button Content="Search" HorizontalAlignment="Left" Margin="10,72,0,0" VerticalAlignment="Top" Width="75" Click="Search_Button_Click"/>

 </Grid>



{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private ServiceReference1.IService1 client = new ServiceReference1.Service1Client();

     public MainWindow()
     {
         InitializeComponent();
         init();
     }

     public void init()
     {
         this.fromPicker.SelectedDate = new DateTime(2013, 1, 1);
         this.toPicker.SelectedDate = new DateTime(2013, 1, 1);
         update();
     }

     public void update()
     {
         var from = this.fromPicker.SelectedDate.ToString().Split(' ')[0];
         var to = this.fromPicker.SelectedDate.ToString().Split(' ')[0];

         var filter = new RangeFilter
         {
             From = from,
             To = to
         };

         var data = this.client.GetWeatherData(filter);
         this.grid.ItemsSource = data;
     }

     private void Search_Button_Click(object sender, RoutedEventArgs e)
     {
         update();
     }
 }

}


Java
DataStore

public class DataStore {

 private static DataStore instance;
 private Set<Pupil> pupils = new HashSet<>();

 private DataStore() {

     // Todo: put test data here
     Pupil pupil1 = new Pupil(UUID.randomUUID(), "Tobias", "Emhofer", LocalDate.parse("2002-10-28"), "20170005");
     Pupil pupil2 = new Pupil(UUID.randomUUID(), "Franz", "Fruehwirth", LocalDate.parse("2003-07-09"),"20170000");

     Absence absence1 = new Absence(UUID.randomUUID(), LocalDate.parse("2022-03-10"), LocalDate.parse("2022-03-11"), "Zaz nd",false);
     pupil1.addAbsence(absence1);

     Absence absence2 = new Absence(UUID.randomUUID(), LocalDate.parse("2022-03-13"), LocalDate.parse("2022-03-14"), "a wuascht",false);
     pupil2.addAbsence(absence2);

     pupils.add(pupil1);
     pupils.add(pupil2);

 }


 public void setPupils(Set<Pupil> pupils) {
     this.pupils.addAll(pupils);
 }

 public static DataStore getInstance() {
     if (instance == null) {
         instance = new DataStore();
     }
     return instance;
 }

 public Set<Pupil> getPupils(){
     return pupils;
 }

 public Optional<Pupil> getPupilById2(UUID id) {
     return pupils.stream()
             .filter(pupil -> pupil.getId().equals(id))
             .findFirst();
 }
 public Pupil getPupilById(UUID id) {
     for (Pupil pupil : pupils) {
         if (pupil.getId().equals(id)) {
             return pupil;
         }
     }
     return null;
 }


}


Pupil

public class Pupil {
private UUID id;
private String firstName;
private String lastName;
private LocalDate dateOfBirth;
private String studentNumber;
private Set<Absence> absences = new HashSet<>();


 public Pupil(UUID id, String firstName, String lastName, LocalDate dateOfBirth, String studentNumber) {
     this.id = id;
     this.firstName = firstName;
     this.lastName = lastName;
     this.dateOfBirth = dateOfBirth;
     this.studentNumber = studentNumber;
 }

 public Pupil() {
 }

 public UUID getId() {
     return id;
 }

 public void setId(UUID id) {
     this.id = id;
 }

 public String getFirstName() {
     return firstName;
 }

 public void setFirstName(String firstName) {
     this.firstName = firstName;
 }

 public String getLastName() {
     return lastName;
 }

 public void setLastName(String lastName) {
     this.lastName = lastName;
 }

 public LocalDate getDateOfBirth() {
     return dateOfBirth;
 }

 public void setDateOfBirth(LocalDate dateOfBirth) {
     this.dateOfBirth = dateOfBirth;
 }

 public String getStudentNumber() {
     return studentNumber;
 }

 public void setStudentNumber(String studentNumber) {
     this.studentNumber = studentNumber;
 }

 public Set<Absence> getAbsences() {
     return absences;
 }

 public void setAbsences(Set<Absence> absences) {
     this.absences = absences;
 }

 public void addAbsence(Absence absence) {
     absences.add(absence);
 }


 public Absence getAbsenceById(UUID id) {
     for (Absence absence : absences) {
         if (absence.getId().equals(id)) {
             return absence;
         }
     }
     return null;
 }

 @Override
 public String toString() {
     return "Pupil{" +
             "id=" + id +
             ", firstName='" + firstName + '\'' +
             ", lastName='" + lastName + '\'' +
             ", dateOfBirth=" + dateOfBirth +
             ", studentNumber='" + studentNumber + '\'' +
             ", absences=" + absences +
             '}';
 }

}


Absence


public class Absence {
private UUID id;
private LocalDate from;
private LocalDate to;
private String reason;
private boolean excused;


 public Absence() {
     id = UUID.randomUUID();
 }

 public Absence(UUID id, LocalDate from, LocalDate to, String reason, boolean excused) {
     this.id = id;
     this.from = from;
     this.to = to;
     this.reason = reason;
     this.excused = excused;
 }

 public UUID getId() {
     return id;
 }

 public void setId(UUID id) {
     this.id = id;
 }

 public LocalDate getFrom() {
     return from;
 }

 public void setFrom(LocalDate from) {
     this.from = from;
 }

 public LocalDate getTo() {
     return to;
 }

 public void setTo(LocalDate to) {
     this.to = to;
 }

 public String getReason() {
     return reason;
 }

 public void setReason(String reason) {
     this.reason = reason;
 }

 public boolean isExcused() {
     return excused;
 }

 public void setExcused(boolean excused) {
     this.excused = excused;
 }

 @Override
 public String toString() {
     return "Absence{" +
             "id=" + id +
             ", from=" + from +
             ", to=" + to +
             ", reason='" + reason + '\'' +
             ", excused=" + excused +
             '}';
 }

}


HelloApp

@ApplicationPath("/api")
public class HelloApplication extends Application {

}


PupilResource

@Path("/pupil")
public class PupilResource implements IPupilResource {
DataStore dataStore = DataStore.getInstance();

 @Override
 public Set<Pupil> getAll() {
     return dataStore.getPupils();
 }

 @Override
 public Optional<Pupil> getOnePupil(UUID id) {
     return dataStore.getPupilById2(id);
 }

 @Override
 public Absence newAbsence(String id, Absence absence) {
     DataStore.getInstance().getPupilById(UUID.fromString(id)).addAbsence(absence);
     return DataStore.getInstance().getPupilById(UUID.fromString(id)).getAbsenceById(absence.getId());
 }

 @Override
 public Absence getAbsenceById(String stId, String abId) {
     return DataStore.getInstance().getPupilById(UUID.fromString(stId)).getAbsenceById(UUID.fromString(abId));
 }

 @Override
 public boolean excuseAbsence(String stId, String abId) {
     DataStore.getInstance().getPupilById(UUID.fromString(stId)).getAbsenceById(UUID.fromString(abId)).setExcused(true);
     return DataStore.getInstance().getPupilById(UUID.fromString(stId)).getAbsenceById(UUID.fromString(abId)).isExcused();
 }

}


ImportData

public class ImportData implements IImportData {
@Override
public Set<Pupil> importDataFromJSON(Set<Pupil> pupils) {
DataStore.getInstance().setPupils(pupils);
return DataStore.getInstance().getPupils();
}
}


IPUPILREs

@Path("/pupil")
public interface IPupilResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
Set<Pupil> getAll();

 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("{pupil_id}")
 Optional<Pupil> getOnePupil(@PathParam("pupil_id") UUID id);


 @POST
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{pupil_id}/absence")
 Absence newAbsence(@PathParam("pupil_id") String id,
                    Absence absence);

 @GET
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{pupil_id}/absence/{absence_id}")
 Absence getAbsenceById(@PathParam("pupil_id") String stId,
                        @PathParam("absence_id") String abId);


 @PUT
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 @Path("/{pupil_id}/absence/{absence_id}/excuse")
 boolean excuseAbsence(@PathParam("pupil_id") String stId,
                       @PathParam("absence_id") String abId);

}


IImportData

@Path("/importData")
public interface IImportData {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
Set<Pupil> importDataFromJSON(Set<Pupil> pupils);
}


index.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="${pageContext.request.contextPath}/PupilListServlet">Pupil List</a>
</body>
</html>


PupilServlet
@WebServlet(name = "PupilListServlet", value = "/PupilListServlet")
public class PupilServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("pupils", new TrackingClient(DataStore.getInstance().getPupils()));
request.getRequestDispatcher("pupillist.jsp").forward(request,response);
}

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 }

}


pupillist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="pupils" class="com.example.demo.TrackingClient" scope="request"/>
<html>
<head>
<title>Pupil list</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/AbsenceServlet" method="get">
<select name="pupilselect">
<% for (Pupil pupil : pupils.getPupils()) {%>
<option value="<%=pupil.getId()%>"><%=pupil.getFirstName() + " " + pupil.getLastName()%></option>
<%}%>
</select>
<input type="submit" name="Submit">
</form>
</body>
</html>


AbsenceServlet
@WebServlet(name = "AbsenceServlet", value = "/AbsenceServlet")
public class AbsenceServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String s = request.getParameter("pupilselect");
request.setAttribute("a", DataStore.getInstance().getPupilById(UUID.fromString(s)));
request.getRequestDispatcher("absencelist.jsp").forward(request, response);
}

 @Override
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

 }

}


absencelist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="a" class="model.Pupil" scope="request"/>
<html>
<head>
<title>Absence List</title>
</head>
<body>
<table>
<% for (Absence absence : a.getAbsences()) {%>
<tr>
<td><%=absence.toString()%>
</td>
</tr>
<%}%>
</table>
</body>
</html>


Trackingclient
public class TrackingClient {
private Set<Pupil> pupils = new HashSet<>();

 public TrackingClient() {
 }

 public TrackingClient(Set<Pupil> pupils){
     this.pupils = pupils;
 }

 public Set<Pupil> getPupils() {
     return pupils;
 }

 public void setPupils(Set<Pupil> pupils) {
     this.pupils = pupils;
 }

}

windows-wcf
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

0 Answers